feat: Allow renaming fields
This commit is contained in:
@@ -10,7 +10,7 @@ use syn::{DataEnum, DataStruct, DeriveInput, LitStr, Token, parse_macro_input, s
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct StructField {
|
||||
name: syn::Ident,
|
||||
name: LitStr,
|
||||
ty: syn::Type,
|
||||
case: Option<Case<'static>>,
|
||||
optional: bool,
|
||||
@@ -19,7 +19,7 @@ struct StructField {
|
||||
|
||||
impl ToTokens for StructField {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream2) {
|
||||
let mut name = self.name.to_string();
|
||||
let mut name = self.name.value();
|
||||
|
||||
if let Some(case) = self.case {
|
||||
name = name.to_case(case);
|
||||
@@ -283,6 +283,9 @@ fn parse_fields(
|
||||
for field in input {
|
||||
let mut default = false;
|
||||
let mut flatten = false;
|
||||
let name = field.ident.expect("We already checked that ident is some");
|
||||
let mut as_name = LitStr::new(&name.to_string(), name.span());
|
||||
|
||||
for attr in &field.attrs {
|
||||
if attr.path().is_ident("serde")
|
||||
&& let Err(err) = attr.parse_nested_meta(|meta| {
|
||||
@@ -307,10 +310,25 @@ fn parse_fields(
|
||||
{
|
||||
return Err(err);
|
||||
}
|
||||
|
||||
if attr.path().is_ident("typed")
|
||||
&& let Err(err) = attr.parse_nested_meta(|meta| {
|
||||
if meta.path.is_ident("as") {
|
||||
let value = meta.value()?;
|
||||
as_name = value.parse()?;
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
Err(syn::Error::new(meta.path.span(), "Unknown attribute"))
|
||||
}
|
||||
})
|
||||
{
|
||||
return Err(err);
|
||||
}
|
||||
}
|
||||
|
||||
fields.push(StructField {
|
||||
name: field.ident.expect("We already checked that ident is some"),
|
||||
name: as_name,
|
||||
ty: field.ty,
|
||||
case,
|
||||
optional: default,
|
||||
|
||||
Reference in New Issue
Block a user