Skip to content

Commit

Permalink
Merge pull request #184 from escritorio-gustavo/patch-1
Browse files Browse the repository at this point in the history
Make sure that `rename_all = "camelCase"` works like in serde
  • Loading branch information
NyxCode authored Jan 11, 2024
2 parents e4189a2 + f334bcf commit fdeb5a0
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 3 deletions.
24 changes: 22 additions & 2 deletions macros/src/attr/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,29 @@ impl Inflection {
match self {
Inflection::Lower => string.to_lowercase(),
Inflection::Upper => string.to_uppercase(),
Inflection::Camel => string.to_camel_case(),
Inflection::Camel => {
let pascal = Inflection::apply(Inflection::Pascal, string);
pascal[..1].to_ascii_lowercase() + &pascal[1..]
}
Inflection::Snake => string.to_snake_case(),
Inflection::Pascal => string.to_pascal_case(),
Inflection::Pascal => {
let mut s = String::with_capacity(string.len());

let mut capitalize = true;
for c in string.chars() {
if c == '_' {
capitalize = true;
continue;
} else if capitalize {
s.push(c.to_ascii_uppercase());
capitalize = false;
} else {
s.push(c.to_ascii_lowercase())
}
}

s
}
Inflection::ScreamingSnake => string.to_screaming_snake_case(),
Inflection::Kebab => string.to_kebab_case(),
}
Expand Down
1 change: 1 addition & 0 deletions ts-rs/tests/generics.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#![allow(clippy::box_collection)]
#![allow(dead_code)]

use std::{
Expand Down
24 changes: 24 additions & 0 deletions ts-rs/tests/struct_rename.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,30 @@ fn rename_all() {
assert_eq!(Rename::inline(), "{ A: number, B: number, }");
}

#[test]
fn rename_all_camel_case() {
#[derive(TS)]
#[ts(rename_all = "camelCase")]
struct Rename {
crc32c_hash: i32,
b: i32,
}

assert_eq!(Rename::inline(), "{ crc32cHash: number, b: number, }");
}

#[test]
fn rename_all_pascal_case() {
#[derive(TS)]
#[ts(rename_all = "PascalCase")]
struct Rename {
crc32c_hash: i32,
b: i32,
}

assert_eq!(Rename::inline(), "{ Crc32cHash: number, B: number, }");
}

#[cfg(feature = "serde-compat")]
#[test]
fn serde_rename_special_char() {
Expand Down
2 changes: 1 addition & 1 deletion ts-rs/tests/union_with_internal_tag.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#![allow(dead_code, clippy::blacklisted_name)]
#![allow(dead_code, clippy::disallowed_names)]

use serde::Serialize;
use ts_rs::TS;
Expand Down

0 comments on commit fdeb5a0

Please sign in to comment.