mirror of
https://git.proxmox.com/git/proxmox
synced 2025-05-29 07:17:42 +00:00
api-macro: support non-idents in serde(rename)
For PVE we'll have enum variants like /dev/urandom... Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
39453abb8f
commit
12674a37e0
@ -59,7 +59,7 @@ pub fn handle_enum(
|
|||||||
|
|
||||||
let attrs = serde::SerdeAttrib::try_from(&variant.attrs[..])?;
|
let attrs = serde::SerdeAttrib::try_from(&variant.attrs[..])?;
|
||||||
let variant_string = if let Some(renamed) = attrs.rename {
|
let variant_string = if let Some(renamed) = attrs.rename {
|
||||||
renamed.into_lit_str()
|
renamed
|
||||||
} else if let Some(rename_all) = container_attrs.rename_all {
|
} else if let Some(rename_all) = container_attrs.rename_all {
|
||||||
let name = rename_all.apply_to_variant(&variant.ident.to_string());
|
let name = rename_all.apply_to_variant(&variant.ident.to_string());
|
||||||
syn::LitStr::new(&name, variant.ident.span())
|
syn::LitStr::new(&name, variant.ident.span())
|
||||||
|
@ -169,7 +169,7 @@ fn handle_regular_struct(
|
|||||||
.ok_or_else(|| format_err!(field => "field without name?"))?;
|
.ok_or_else(|| format_err!(field => "field without name?"))?;
|
||||||
|
|
||||||
if let Some(renamed) = attrs.rename {
|
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 {
|
} else if let Some(rename_all) = container_attrs.rename_all {
|
||||||
let name = rename_all.apply_to_field(&ident.to_string());
|
let name = rename_all.apply_to_field(&ident.to_string());
|
||||||
(name, ident.span())
|
(name, ident.span())
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
use crate::util::{AttrArgs, FieldName};
|
use crate::util::AttrArgs;
|
||||||
|
|
||||||
/// Serde name types.
|
/// Serde name types.
|
||||||
#[allow(clippy::enum_variant_names)]
|
#[allow(clippy::enum_variant_names)]
|
||||||
@ -159,7 +159,7 @@ impl TryFrom<&[syn::Attribute]> for ContainerAttrib {
|
|||||||
/// `serde` field/variant attributes we support
|
/// `serde` field/variant attributes we support
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct SerdeAttrib {
|
pub struct SerdeAttrib {
|
||||||
pub rename: Option<FieldName>,
|
pub rename: Option<syn::LitStr>,
|
||||||
pub flatten: bool,
|
pub flatten: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,10 +176,9 @@ impl SerdeAttrib {
|
|||||||
match arg {
|
match arg {
|
||||||
NestedMeta::Meta(Meta::NameValue(var)) if var.path.is_ident("rename") => {
|
NestedMeta::Meta(Meta::NameValue(var)) if var.path.is_ident("rename") => {
|
||||||
match var.lit {
|
match var.lit {
|
||||||
syn::Lit::Str(lit) => {
|
syn::Lit::Str(rename) => {
|
||||||
let rename = FieldName::from(&lit);
|
|
||||||
if self.rename.is_some() && self.rename.as_ref() != Some(&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);
|
self.rename = Some(rename);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user