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::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}