use syn::{Token, punctuated::Punctuated};
use crate::{
accessors::AccessorArg, fields::FieldParam, modifier::Modifier, new_from_args::NewFromArgs,
};
#[derive(Debug)]
pub struct AccessorFieldAttrs {
pub prefix: String,
pub name: String,
pub modifier: Modifier,
pub option: bool,
}
impl AccessorFieldAttrs {
pub fn from_values(
prefix: String,
name: String,
modifier: Modifier,
option: bool,
) -> AccessorFieldAttrs {
AccessorFieldAttrs {
prefix,
name,
modifier,
option,
}
}
}
impl NewFromArgs<AccessorArg> for AccessorFieldAttrs {
fn new(args: Punctuated<AccessorArg, Token![,]>) -> AccessorFieldAttrs {
let mut prefix = String::new();
let mut name = String::new();
let mut modifier = Modifier::Ref;
let mut option = false;
for arg in args {
match arg {
AccessorArg::Prefix(p) => prefix = p,
AccessorArg::Name(n) => name = n,
AccessorArg::Modifier(m) => modifier = m,
AccessorArg::FieldParam(FieldParam::Option) => option = true,
_ => {}
}
}
AccessorFieldAttrs {
prefix,
name,
modifier,
option,
}
}
}