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 {
|
impl Field {
|
||||||
pub fn parse(raw: &syn::Field, rename_all: Option<RenameRule>) -> Result<Field, Error> {
|
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();
|
let ident = raw.ident.as_ref().unwrap().clone();
|
||||||
|
|
||||||
// field level name override takes precendence over container level rename_all override
|
// 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
|
// variant level name override takes precendence over container level rename_all override
|
||||||
let name = overrides.name.unwrap_or_else(|| match rename_all {
|
let name = overrides.name.unwrap_or_else(|| match rename_all {
|
||||||
|
@ -15,7 +15,7 @@ use crate::enums::Variant;
|
|||||||
use crate::overrides::Overrides;
|
use crate::overrides::Overrides;
|
||||||
|
|
||||||
pub fn expand_derive_fromsql(input: DeriveInput) -> Result<TokenStream, Error> {
|
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 {
|
if overrides.name.is_some() && overrides.transparent {
|
||||||
return Err(Error::new_spanned(
|
return Err(Error::new_spanned(
|
||||||
|
@ -10,7 +10,7 @@ pub struct Overrides {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl 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 {
|
let mut overrides = Overrides {
|
||||||
name: None,
|
name: None,
|
||||||
rename_all: None,
|
rename_all: None,
|
||||||
@ -34,6 +34,12 @@ impl Overrides {
|
|||||||
Meta::NameValue(meta) => {
|
Meta::NameValue(meta) => {
|
||||||
let name_override = meta.path.is_ident("name");
|
let name_override = meta.path.is_ident("name");
|
||||||
let rename_all_override = meta.path.is_ident("rename_all");
|
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 {
|
if !name_override && !rename_all_override {
|
||||||
return Err(Error::new_spanned(&meta.path, "unknown override"));
|
return Err(Error::new_spanned(&meta.path, "unknown override"));
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ use crate::enums::Variant;
|
|||||||
use crate::overrides::Overrides;
|
use crate::overrides::Overrides;
|
||||||
|
|
||||||
pub fn expand_derive_tosql(input: DeriveInput) -> Result<TokenStream, Error> {
|
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 {
|
if overrides.name.is_some() && overrides.transparent {
|
||||||
return Err(Error::new_spanned(
|
return Err(Error::new_spanned(
|
||||||
|
Loading…
Reference in New Issue
Block a user