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