codama_attributes/
attribute_context.rs

1use derive_more::derive::From;
2
3#[derive(Debug, PartialEq, From)]
4pub enum AttributeContext<'a> {
5    File(&'a syn::File),
6    Item(&'a syn::Item),
7    Variant(&'a syn::Variant),
8    Field(&'a syn::Field),
9    ImplItem(&'a syn::ImplItem),
10}
11
12impl<'a> AttributeContext<'a> {
13    pub fn get_fields(&self) -> Option<&'a syn::Fields> {
14        match self {
15            AttributeContext::Item(syn::Item::Struct(syn::ItemStruct { fields, .. })) => {
16                Some(fields)
17            }
18            AttributeContext::Variant(syn::Variant { fields, .. }) => Some(fields),
19            _ => None,
20        }
21    }
22
23    pub fn get_named_fields(&self) -> Option<&'a syn::FieldsNamed> {
24        match self.get_fields() {
25            Some(syn::Fields::Named(fields)) => Some(fields),
26            _ => None,
27        }
28    }
29}