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