use syn::{Token, punctuated::Punctuated};
use crate::accessors::AccessorArg;
use crate::accessors::AccessorFieldAttrs;
use crate::fields::FieldParam;
use crate::modifier::Modifier;
use crate::new_from_args::NewFromArgs;
#[derive(Debug, Clone)]
pub struct AccessorStructAttrs {
pub includes: Vec<String>,
pub excludes: Vec<String>,
pub prefix: String,
pub modifier: Modifier,
pub include_pub: bool,
pub option: bool,
}
impl NewFromArgs<AccessorArg> for AccessorStructAttrs {
fn new(punctuated: Punctuated<AccessorArg, Token![,]>) -> AccessorStructAttrs {
let mut includes = Vec::new();
let mut excludes = Vec::new();
let mut prefix = String::new();
let mut modifier = Modifier::Ref;
let mut include_pub = false;
let mut option = false;
for value in punctuated {
match value {
AccessorArg::Includes(i) => includes = i,
AccessorArg::Excludes(e) => excludes = e,
AccessorArg::Prefix(p) => prefix = p,
AccessorArg::Modifier(m) => modifier = m,
AccessorArg::Pub => include_pub = true,
AccessorArg::FieldParam(FieldParam::Option) => option = true,
_ => {}
};
}
AccessorStructAttrs {
includes,
excludes,
prefix,
modifier,
include_pub,
option,
}
}
}
impl Into<AccessorFieldAttrs> for AccessorStructAttrs {
fn into(self) -> AccessorFieldAttrs {
AccessorFieldAttrs::from_values(self.prefix, "".to_string(), self.modifier, self.option)
}
}