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::Impl(korok) => self.visit_impl(korok),
42            codama_koroks::ItemKorok::Const(korok) => self.visit_const(korok),
43            codama_koroks::ItemKorok::Unsupported(korok) => self.visit_unsupported_item(korok),
44        }
45    }
46
47    fn visit_file_module(
48        &mut self,
49        korok: &mut codama_koroks::FileModuleKorok,
50    ) -> CodamaResult<()> {
51        korok
52            .items
53            .iter_mut()
54            .map(|item_korok| self.visit_item(item_korok))
55            .collect_and_combine_errors()?;
56        Ok(())
57    }
58
59    fn visit_module(&mut self, korok: &mut codama_koroks::ModuleKorok) -> CodamaResult<()> {
60        korok
61            .items
62            .iter_mut()
63            .map(|item_korok| self.visit_item(item_korok))
64            .collect_and_combine_errors()?;
65        Ok(())
66    }
67
68    fn visit_struct(&mut self, korok: &mut codama_koroks::StructKorok) -> CodamaResult<()> {
69        korok
70            .fields
71            .iter_mut()
72            .map(|field_korok| self.visit_field(field_korok))
73            .collect_and_combine_errors()?;
74        Ok(())
75    }
76
77    fn visit_enum(&mut self, korok: &mut codama_koroks::EnumKorok) -> CodamaResult<()> {
78        korok
79            .variants
80            .iter_mut()
81            .map(|variant_korok| self.visit_enum_variant(variant_korok))
82            .collect_and_combine_errors()?;
83        Ok(())
84    }
85
86    fn visit_enum_variant(
87        &mut self,
88        korok: &mut codama_koroks::EnumVariantKorok,
89    ) -> CodamaResult<()> {
90        korok
91            .fields
92            .iter_mut()
93            .map(|field_korok| self.visit_field(field_korok))
94            .collect_and_combine_errors()?;
95        Ok(())
96    }
97
98    fn visit_unsupported_item(
99        &mut self,
100        _korok: &mut codama_koroks::UnsupportedItemKorok,
101    ) -> CodamaResult<()> {
102        Ok(())
103    }
104
105    fn visit_field(&mut self, _korok: &mut codama_koroks::FieldKorok) -> CodamaResult<()> {
106        Ok(())
107    }
108
109    fn visit_impl(&mut self, korok: &mut codama_koroks::ImplKorok) -> CodamaResult<()> {
110        korok
111            .items
112            .iter_mut()
113            .map(|impl_item_korok| self.visit_impl_item(impl_item_korok))
114            .collect_and_combine_errors()?;
115        Ok(())
116    }
117
118    fn visit_impl_item(&mut self, korok: &mut codama_koroks::ImplItemKorok) -> CodamaResult<()> {
119        match korok {
120            codama_koroks::ImplItemKorok::Const(korok) => self.visit_const(korok),
121            codama_koroks::ImplItemKorok::Unsupported(korok) => {
122                self.visit_unsupported_impl_item(korok)
123            }
124        }
125    }
126
127    fn visit_const(&mut self, _korok: &mut codama_koroks::ConstKorok) -> CodamaResult<()> {
128        Ok(())
129    }
130
131    fn visit_unsupported_impl_item(
132        &mut self,
133        _korok: &mut codama_koroks::UnsupportedImplItemKorok,
134    ) -> CodamaResult<()> {
135        Ok(())
136    }
137}