codama_korok_visitors/
compose_visitor.rs1use codama_errors::{CodamaResult, IteratorCombineErrors};
2
3use crate::KorokVisitor;
4
5#[derive(Default)]
7pub struct ComposeVisitor<'a> {
8 pub visitors: Vec<Box<dyn KorokVisitor + 'a>>,
9}
10
11impl<'a> ComposeVisitor<'a> {
12 pub fn new() -> Self {
13 Self::default()
14 }
15
16 pub fn with<T: KorokVisitor + 'a>(mut self, visitor: T) -> Self {
18 self.visitors.push(Box::new(visitor));
19 self
20 }
21}
22
23impl KorokVisitor for ComposeVisitor<'_> {
24 fn visit_root(&mut self, korok: &mut codama_koroks::RootKorok) -> CodamaResult<()> {
25 self.visitors
26 .iter_mut()
27 .map(|v| v.visit_root(korok))
28 .collect_and_combine_errors()?;
29 Ok(())
30 }
31
32 fn visit_crate(&mut self, korok: &mut codama_koroks::CrateKorok) -> CodamaResult<()> {
33 self.visitors
34 .iter_mut()
35 .map(|v| v.visit_crate(korok))
36 .collect_and_combine_errors()?;
37 Ok(())
38 }
39
40 fn visit_item(&mut self, korok: &mut codama_koroks::ItemKorok) -> CodamaResult<()> {
41 self.visitors
42 .iter_mut()
43 .map(|v| v.visit_item(korok))
44 .collect_and_combine_errors()?;
45 Ok(())
46 }
47
48 fn visit_file_module(
49 &mut self,
50 korok: &mut codama_koroks::FileModuleKorok,
51 ) -> CodamaResult<()> {
52 self.visitors
53 .iter_mut()
54 .map(|v| v.visit_file_module(korok))
55 .collect_and_combine_errors()?;
56 Ok(())
57 }
58
59 fn visit_module(&mut self, korok: &mut codama_koroks::ModuleKorok) -> CodamaResult<()> {
60 self.visitors
61 .iter_mut()
62 .map(|v| v.visit_module(korok))
63 .collect_and_combine_errors()?;
64 Ok(())
65 }
66
67 fn visit_struct(&mut self, korok: &mut codama_koroks::StructKorok) -> CodamaResult<()> {
68 self.visitors
69 .iter_mut()
70 .map(|v| v.visit_struct(korok))
71 .collect_and_combine_errors()?;
72 Ok(())
73 }
74
75 fn visit_enum(&mut self, korok: &mut codama_koroks::EnumKorok) -> CodamaResult<()> {
76 self.visitors
77 .iter_mut()
78 .map(|v| v.visit_enum(korok))
79 .collect_and_combine_errors()?;
80 Ok(())
81 }
82
83 fn visit_enum_variant(
84 &mut self,
85 korok: &mut codama_koroks::EnumVariantKorok,
86 ) -> CodamaResult<()> {
87 self.visitors
88 .iter_mut()
89 .map(|v| v.visit_enum_variant(korok))
90 .collect_and_combine_errors()?;
91 Ok(())
92 }
93
94 fn visit_unsupported_item(
95 &mut self,
96 korok: &mut codama_koroks::UnsupportedItemKorok,
97 ) -> CodamaResult<()> {
98 self.visitors
99 .iter_mut()
100 .map(|v| v.visit_unsupported_item(korok))
101 .collect_and_combine_errors()?;
102 Ok(())
103 }
104
105 fn visit_fields(&mut self, korok: &mut codama_koroks::FieldsKorok) -> CodamaResult<()> {
106 self.visitors
107 .iter_mut()
108 .map(|v| v.visit_fields(korok))
109 .collect_and_combine_errors()?;
110 Ok(())
111 }
112
113 fn visit_field(&mut self, korok: &mut codama_koroks::FieldKorok) -> CodamaResult<()> {
114 self.visitors
115 .iter_mut()
116 .map(|v| v.visit_field(korok))
117 .collect_and_combine_errors()?;
118 Ok(())
119 }
120}