codama_koroks/
const_korok.rs

1use crate::KorokTrait;
2use codama_attributes::Attributes;
3use codama_errors::CodamaResult;
4use codama_nodes::Node;
5use codama_syn_helpers::extensions::*;
6
7#[derive(Debug, PartialEq)]
8pub struct ConstKorok<'a> {
9    pub ast: ConstAst<'a>,
10    pub attributes: Attributes<'a>,
11    pub node: Option<Node>,
12}
13
14#[derive(Debug, PartialEq)]
15pub enum ConstAst<'a> {
16    Item(&'a syn::ItemConst),
17    ImplItem(&'a syn::ImplItemConst),
18}
19
20impl<'a> ConstKorok<'a> {
21    pub fn parse(item: &'a syn::Item) -> CodamaResult<Self> {
22        let syn::Item::Const(ast) = item else {
23            return Err(item.error("Expected a const item").into());
24        };
25        let attributes = Attributes::parse(&ast.attrs, item.into())?;
26        Ok(Self {
27            ast: ConstAst::Item(ast),
28            attributes,
29            node: None,
30        })
31    }
32
33    pub fn parse_impl_item(item: &'a syn::ImplItem) -> CodamaResult<Self> {
34        let syn::ImplItem::Const(ast) = item else {
35            return Err(syn::Error::new_spanned(item, "Expected a const impl item").into());
36        };
37        let attributes = Attributes::parse(&ast.attrs, item.into())?;
38        Ok(Self {
39            ast: ConstAst::ImplItem(ast),
40            attributes,
41            node: None,
42        })
43    }
44}
45
46impl KorokTrait for ConstKorok<'_> {
47    fn node(&self) -> &Option<Node> {
48        &self.node
49    }
50
51    fn set_node(&mut self, node: Option<Node>) {
52        self.node = node;
53    }
54
55    fn attributes(&self) -> Option<&Attributes<'_>> {
56        Some(&self.attributes)
57    }
58}