Distinguish between field and container attributes when parsing
This commit is contained in:
parent
071dfa3f3b
commit
bc8ad8aee6
@ -14,7 +14,7 @@ pub struct Field {
|
||||
|
||||
impl Field {
|
||||
pub fn parse(raw: &syn::Field, rename_all: Option<RenameRule>) -> Result<Field, Error> {
|
||||
let overrides = Overrides::extract(&raw.attrs)?;
|
||||
let overrides = Overrides::extract(&raw.attrs, false)?;
|
||||
let ident = raw.ident.as_ref().unwrap().clone();
|
||||
|
||||
// field level name override takes precendence over container level rename_all override
|
||||
|
@ -18,7 +18,7 @@ impl Variant {
|
||||
))
|
||||
}
|
||||
}
|
||||
let overrides = Overrides::extract(&raw.attrs)?;
|
||||
let overrides = Overrides::extract(&raw.attrs, false)?;
|
||||
|
||||
// variant level name override takes precendence over container level rename_all override
|
||||
let name = overrides.name.unwrap_or_else(|| match rename_all {
|
||||
|
@ -15,7 +15,7 @@ use crate::enums::Variant;
|
||||
use crate::overrides::Overrides;
|
||||
|
||||
pub fn expand_derive_fromsql(input: DeriveInput) -> Result<TokenStream, Error> {
|
||||
let overrides = Overrides::extract(&input.attrs)?;
|
||||
let overrides = Overrides::extract(&input.attrs, true)?;
|
||||
|
||||
if overrides.name.is_some() && overrides.transparent {
|
||||
return Err(Error::new_spanned(
|
||||
|
@ -10,7 +10,7 @@ pub struct Overrides {
|
||||
}
|
||||
|
||||
impl Overrides {
|
||||
pub fn extract(attrs: &[Attribute]) -> Result<Overrides, Error> {
|
||||
pub fn extract(attrs: &[Attribute], container_attr: bool) -> Result<Overrides, Error> {
|
||||
let mut overrides = Overrides {
|
||||
name: None,
|
||||
rename_all: None,
|
||||
@ -34,6 +34,12 @@ impl Overrides {
|
||||
Meta::NameValue(meta) => {
|
||||
let name_override = meta.path.is_ident("name");
|
||||
let rename_all_override = meta.path.is_ident("rename_all");
|
||||
if !container_attr && rename_all_override {
|
||||
return Err(Error::new_spanned(
|
||||
&meta.path,
|
||||
"rename_all is a container attribute",
|
||||
));
|
||||
}
|
||||
if !name_override && !rename_all_override {
|
||||
return Err(Error::new_spanned(&meta.path, "unknown override"));
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ use crate::enums::Variant;
|
||||
use crate::overrides::Overrides;
|
||||
|
||||
pub fn expand_derive_tosql(input: DeriveInput) -> Result<TokenStream, Error> {
|
||||
let overrides = Overrides::extract(&input.attrs)?;
|
||||
let overrides = Overrides::extract(&input.attrs, true)?;
|
||||
|
||||
if overrides.name.is_some() && overrides.transparent {
|
||||
return Err(Error::new_spanned(
|
||||
|
Loading…
Reference in New Issue
Block a user