use crate::{
syn_helpers::{MemberExts, TypeExts},
Assertion, Context, MapExpr,
};
#[derive(Debug)]
pub(crate) struct ParselyCommonFieldData {
pub(crate) ident: syn::Member,
pub(crate) ty: syn::Type,
pub(crate) assertion: Option<Assertion>,
pub(crate) context: Option<Context>,
pub(crate) map: Option<MapExpr>,
pub(crate) alignment: Option<usize>,
}
impl ParselyCommonFieldData {
pub(crate) fn buffer_type(&self) -> &syn::Type {
if self.ty.is_option() || self.ty.is_collection() {
self.ty
.inner_type()
.expect("Option or collection has an inner type")
} else {
&self.ty
}
}
pub(crate) fn context_values(&self) -> Vec<syn::Expr> {
if let Some(ref field_context) = self.context {
field_context.expressions(&format!(
"Read context for field '{}'",
self.ident.as_friendly_string(),
))
} else {
vec![]
}
}
}