codama_koroks/
const_korok.rs1use 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}