From 12674a37e05965d99f0a7aa1193f36f295ea9eab Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Fri, 31 Mar 2023 13:43:26 +0200 Subject: [PATCH] api-macro: support non-idents in serde(rename) For PVE we'll have enum variants like /dev/urandom... Signed-off-by: Wolfgang Bumiller --- proxmox-api-macro/src/api/enums.rs | 2 +- proxmox-api-macro/src/api/structs.rs | 2 +- proxmox-api-macro/src/serde.rs | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/proxmox-api-macro/src/api/enums.rs b/proxmox-api-macro/src/api/enums.rs index af5c44bc..044126a5 100644 --- a/proxmox-api-macro/src/api/enums.rs +++ b/proxmox-api-macro/src/api/enums.rs @@ -59,7 +59,7 @@ pub fn handle_enum( let attrs = serde::SerdeAttrib::try_from(&variant.attrs[..])?; let variant_string = if let Some(renamed) = attrs.rename { - renamed.into_lit_str() + renamed } else if let Some(rename_all) = container_attrs.rename_all { let name = rename_all.apply_to_variant(&variant.ident.to_string()); syn::LitStr::new(&name, variant.ident.span()) diff --git a/proxmox-api-macro/src/api/structs.rs b/proxmox-api-macro/src/api/structs.rs index 34560480..412c87a6 100644 --- a/proxmox-api-macro/src/api/structs.rs +++ b/proxmox-api-macro/src/api/structs.rs @@ -169,7 +169,7 @@ fn handle_regular_struct( .ok_or_else(|| format_err!(field => "field without name?"))?; if let Some(renamed) = attrs.rename { - (renamed.into_str(), ident.span()) + (renamed.value(), ident.span()) } else if let Some(rename_all) = container_attrs.rename_all { let name = rename_all.apply_to_field(&ident.to_string()); (name, ident.span()) diff --git a/proxmox-api-macro/src/serde.rs b/proxmox-api-macro/src/serde.rs index d7f55018..b759e91f 100644 --- a/proxmox-api-macro/src/serde.rs +++ b/proxmox-api-macro/src/serde.rs @@ -5,7 +5,7 @@ use std::convert::TryFrom; -use crate::util::{AttrArgs, FieldName}; +use crate::util::AttrArgs; /// Serde name types. #[allow(clippy::enum_variant_names)] @@ -159,7 +159,7 @@ impl TryFrom<&[syn::Attribute]> for ContainerAttrib { /// `serde` field/variant attributes we support #[derive(Default)] pub struct SerdeAttrib { - pub rename: Option, + pub rename: Option, pub flatten: bool, } @@ -176,10 +176,9 @@ impl SerdeAttrib { match arg { NestedMeta::Meta(Meta::NameValue(var)) if var.path.is_ident("rename") => { match var.lit { - syn::Lit::Str(lit) => { - let rename = FieldName::from(&lit); + syn::Lit::Str(rename) => { if self.rename.is_some() && self.rename.as_ref() != Some(&rename) { - error!(lit => "multiple conflicting 'rename' attributes"); + error!(&rename => "multiple conflicting 'rename' attributes"); } self.rename = Some(rename); }