codama_korok_visitors/
visitor.rs1use 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}