* Fix problems in #1819 * Add test cases --------- Co-authored-by: Billy Chan <ccw.billy.123@gmail.com>
This commit is contained in:
parent
131f9f1123
commit
d8582c30ab
@ -26,7 +26,18 @@ impl ActiveEnum {
|
|||||||
if v.chars().next().map(char::is_numeric).unwrap_or(false) {
|
if v.chars().next().map(char::is_numeric).unwrap_or(false) {
|
||||||
format_ident!("_{}", v)
|
format_ident!("_{}", v)
|
||||||
} else {
|
} else {
|
||||||
format_ident!("{}", v.to_upper_camel_case())
|
let variant_name = v.to_upper_camel_case();
|
||||||
|
if variant_name.is_empty() {
|
||||||
|
println!("Warning: item '{}' in the enumeration '{}' cannot be converted into a valid Rust enum member name. It will be converted to its corresponding UTF-8 encoding. You can modify it later as needed.", v, enum_name);
|
||||||
|
let mut utf_string = String::new();
|
||||||
|
for c in v.chars() {
|
||||||
|
utf_string.push('U');
|
||||||
|
utf_string.push_str(&format!("{:04X}", c as u32));
|
||||||
|
}
|
||||||
|
format_ident!("{}", utf_string)
|
||||||
|
} else {
|
||||||
|
format_ident!("{}", variant_name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -223,4 +234,53 @@ mod tests {
|
|||||||
.to_string()
|
.to_string()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_enum_variant_utf8_encode() {
|
||||||
|
assert_eq!(
|
||||||
|
ActiveEnum {
|
||||||
|
enum_name: Alias::new("ty").into_iden(),
|
||||||
|
values: vec![
|
||||||
|
"Question",
|
||||||
|
"QuestionsAdditional",
|
||||||
|
"Answer",
|
||||||
|
"Other",
|
||||||
|
"/",
|
||||||
|
"//",
|
||||||
|
"A-B-C",
|
||||||
|
]
|
||||||
|
.into_iter()
|
||||||
|
.map(|variant| Alias::new(variant).into_iden())
|
||||||
|
.collect(),
|
||||||
|
}
|
||||||
|
.impl_active_enum(
|
||||||
|
&WithSerde::None,
|
||||||
|
true,
|
||||||
|
&TokenStream::new(),
|
||||||
|
&TokenStream::new(),
|
||||||
|
)
|
||||||
|
.to_string(),
|
||||||
|
quote!(
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Copy)]
|
||||||
|
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "ty")]
|
||||||
|
pub enum Ty {
|
||||||
|
#[sea_orm(string_value = "Question")]
|
||||||
|
Question,
|
||||||
|
#[sea_orm(string_value = "QuestionsAdditional")]
|
||||||
|
QuestionsAdditional,
|
||||||
|
#[sea_orm(string_value = "Answer")]
|
||||||
|
Answer,
|
||||||
|
#[sea_orm(string_value = "Other")]
|
||||||
|
Other,
|
||||||
|
#[sea_orm(string_value = "/")]
|
||||||
|
U002F,
|
||||||
|
#[sea_orm(string_value = "//")]
|
||||||
|
U002FU002F,
|
||||||
|
#[sea_orm(string_value = "A-B-C")]
|
||||||
|
ABC,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.to_string()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user