use syn::LitStr;
use crate::serde_attrs::rename::RenameRule;
use crate::syntax::parse_string_value;
pub(super) fn parse_rename_all_meta(
meta: syn::meta::ParseNestedMeta<'_>,
serialize: &mut Option<RenameRule>,
deserialize: &mut Option<RenameRule>,
) -> syn::Result<()> {
if meta.input.peek(syn::Token![=]) {
let literal: LitStr = meta.value()?.parse()?;
let rule = RenameRule::parse(&literal.value(), literal.span())?;
*serialize = Some(rule);
*deserialize = Some(rule);
return Ok(());
}
meta.parse_nested_meta(|nested| {
if nested.path.is_ident("serialize") {
let literal: LitStr = nested.value()?.parse()?;
*serialize = Some(RenameRule::parse(&literal.value(), literal.span())?);
return Ok(());
}
if nested.path.is_ident("deserialize") {
let literal: LitStr = nested.value()?.parse()?;
*deserialize = Some(RenameRule::parse(&literal.value(), literal.span())?);
return Ok(());
}
Err(nested.error("unsupported serde rename_all option"))
})
}
pub(super) fn parse_rename_meta(
meta: syn::meta::ParseNestedMeta<'_>,
serialize: &mut Option<String>,
deserialize: &mut Option<String>,
) -> syn::Result<()> {
if meta.input.peek(syn::Token![=]) {
let value = parse_string_value(meta)?;
*serialize = Some(value.clone());
*deserialize = Some(value);
return Ok(());
}
meta.parse_nested_meta(|nested| {
if nested.path.is_ident("serialize") {
*serialize = Some(parse_string_value(nested)?);
return Ok(());
}
if nested.path.is_ident("deserialize") {
*deserialize = Some(parse_string_value(nested)?);
return Ok(());
}
Err(nested.error("unsupported serde rename option"))
})
}