use alloc::vec::Vec;
use super::*;
pub use crate::{
ast_enum::Fields,
ast_struct::{FieldsNamed, FieldsUnnamed, Variant},
};
impl Fields {
pub(crate) fn is_named(&self) -> bool {
match self {
Fields::Named(_) => true,
Fields::Unnamed(_) | Fields::Unit => false,
}
}
}
pub(crate) fn assert_struct_semi(fields: &Fields, semi_token: bool) {
match fields {
Fields::Named(_) => assert!(!semi_token, "unexpected token: `;`"),
Fields::Unnamed(_) => {
assert!(semi_token, "unexpected end of input, expected `where` or `;`");
}
Fields::Unit => assert!(
semi_token,
"unexpected end of input, expected one of: `where`, parentheses, curly braces, `;`"
),
}
}
ast_struct! {
pub struct Field {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "FieldMutability::is_none")]
pub(crate) mutability: FieldMutability,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) ident: Option<Ident>,
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon_token: bool,
pub(crate) ty: Type,
}
}