Skip to main content

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