zvariant_utils/derive/
attrs.rs1use crate::{case, def_attrs};
2
3pub fn parse_crate_path(crate_attr: Option<&str>) -> Result<Option<syn::Path>, syn::Error> {
5 crate_attr.map(syn::parse_str).transpose()
6}
7
8pub fn rename_identifier(
10 ident: String,
11 span: proc_macro2::Span,
12 rename_attr: Option<String>,
13 rename_all_attr: Option<&str>,
14) -> Result<String, syn::Error> {
15 if let Some(name) = rename_attr {
16 Ok(name)
17 } else {
18 match rename_all_attr {
19 Some("lowercase") => Ok(ident.to_ascii_lowercase()),
20 Some("UPPERCASE") => Ok(ident.to_ascii_uppercase()),
21 Some("PascalCase") => Ok(case::pascal_or_camel_case(&ident, true)),
22 Some("camelCase") => Ok(case::pascal_or_camel_case(&ident, false)),
23 Some("snake_case") => Ok(case::snake_or_kebab_case(&ident, true)),
24 Some("kebab-case") => Ok(case::snake_or_kebab_case(&ident, false)),
25 None => Ok(ident),
26 Some(other) => Err(syn::Error::new(
27 span,
28 format!("invalid `rename_all` attribute value {other}"),
29 )),
30 }
31 }
32}
33
34def_attrs! {
39 crate zbus, zvariant;
40
41 pub StructAttributes("struct") { signature str, rename_all str, deny_unknown_fields none, crate_path str };
43 pub FieldAttributes("field") { rename str };
45 pub EnumAttributes("enum") { signature str, rename_all str, crate_path str };
47 pub VariantAttributes("variant") { rename str };
49}