codama_koroks/
crate_korok.rs

1use crate::{ItemKorok, KorokTrait};
2use codama_attributes::Attributes;
3use codama_errors::{combine_errors, CodamaError, CodamaResult};
4use codama_nodes::Node;
5use codama_stores::CrateStore;
6
7#[derive(Debug, PartialEq)]
8pub struct CrateKorok<'a> {
9    pub attributes: Attributes<'a>,
10    pub items: Vec<ItemKorok<'a>>,
11    pub node: Option<Node>,
12    pub store: &'a CrateStore,
13}
14
15impl<'a> CrateKorok<'a> {
16    pub fn parse(store: &'a CrateStore) -> CodamaResult<Self> {
17        let (attributes, items) = combine_errors!(
18            Attributes::parse(&store.file.attrs, (&store.file).into()).map_err(CodamaError::from),
19            ItemKorok::parse_all(&store.file.items, &store.file_modules, &mut 0,),
20        )?;
21        Ok(Self {
22            attributes,
23            items,
24            node: None,
25            store,
26        })
27    }
28}
29
30impl KorokTrait for CrateKorok<'_> {
31    fn node(&self) -> &Option<Node> {
32        &self.node
33    }
34
35    fn set_node(&mut self, node: Option<Node>) {
36        self.node = node;
37    }
38
39    fn attributes(&self) -> Option<&Attributes> {
40        Some(&self.attributes)
41    }
42}