codama_korok_visitors/
visitor.rs

1use crate::KorokVisitable;
2use codama_errors::{CodamaResult, IteratorCombineErrors};
3
4pub trait KorokVisitor {
5    fn visit_children(&mut self, korok: &mut dyn KorokVisitable) -> CodamaResult<()>
6    where
7        Self: Sized,
8    {
9        korok
10            .get_children()
11            .into_iter()
12            .map(|child| child.accept(self))
13            .collect_and_combine_errors()?;
14        Ok(())
15    }
16
17    fn visit_root(&mut self, korok: &mut codama_koroks::RootKorok) -> CodamaResult<()> {
18        korok
19            .crates
20            .iter_mut()
21            .map(|crate_korok| self.visit_crate(crate_korok))
22            .collect_and_combine_errors()?;
23        Ok(())
24    }
25
26    fn visit_crate(&mut self, korok: &mut codama_koroks::CrateKorok) -> CodamaResult<()> {
27        korok
28            .items
29            .iter_mut()
30            .map(|item_korok| self.visit_item(item_korok))
31            .collect_and_combine_errors()?;
32        Ok(())
33    }
34
35    fn visit_item(&mut self, korok: &mut codama_koroks::ItemKorok) -> CodamaResult<()> {
36        match korok {
37            codama_koroks::ItemKorok::FileModule(korok) => self.visit_file_module(korok),
38            codama_koroks::ItemKorok::Module(korok) => self.visit_module(korok),
39            codama_koroks::ItemKorok::Struct(korok) => self.visit_struct(korok),
40            codama_koroks::ItemKorok::Enum(korok) => self.visit_enum(korok),
41            codama_koroks::ItemKorok::Unsupported(korok) => self.visit_unsupported_item(korok),
42        }
43    }
44
45    fn visit_file_module(
46        &mut self,
47        korok: &mut codama_koroks::FileModuleKorok,
48    ) -> CodamaResult<()> {
49        korok
50            .items
51            .iter_mut()
52            .map(|item_korok| self.visit_item(item_korok))
53            .collect_and_combine_errors()?;
54        Ok(())
55    }
56
57    fn visit_module(&mut self, korok: &mut codama_koroks::ModuleKorok) -> CodamaResult<()> {
58        korok
59            .items
60            .iter_mut()
61            .map(|item_korok| self.visit_item(item_korok))
62            .collect_and_combine_errors()?;
63        Ok(())
64    }
65
66    fn visit_struct(&mut self, korok: &mut codama_koroks::StructKorok) -> CodamaResult<()> {
67        self.visit_fields(&mut korok.fields)
68    }
69
70    fn visit_enum(&mut self, korok: &mut codama_koroks::EnumKorok) -> CodamaResult<()> {
71        korok
72            .variants
73            .iter_mut()
74            .map(|variant_korok| self.visit_enum_variant(variant_korok))
75            .collect_and_combine_errors()?;
76        Ok(())
77    }
78
79    fn visit_enum_variant(
80        &mut self,
81        korok: &mut codama_koroks::EnumVariantKorok,
82    ) -> CodamaResult<()> {
83        self.visit_fields(&mut korok.fields)
84    }
85
86    fn visit_unsupported_item(
87        &mut self,
88        _korok: &mut codama_koroks::UnsupportedItemKorok,
89    ) -> CodamaResult<()> {
90        Ok(())
91    }
92
93    fn visit_fields(&mut self, korok: &mut codama_koroks::FieldsKorok) -> CodamaResult<()> {
94        korok
95            .all
96            .iter_mut()
97            .map(|field_korok| self.visit_field(field_korok))
98            .collect_and_combine_errors()?;
99        Ok(())
100    }
101
102    fn visit_field(&mut self, _korok: &mut codama_koroks::FieldKorok) -> CodamaResult<()> {
103        Ok(())
104    }
105}