codama_korok_plugins/
default_plugin.rs

1use crate::KorokPlugin;
2use codama_errors::CodamaResult;
3use codama_korok_visitors::{
4    ApplyTypeModifiersVisitor, ApplyTypeOverridesVisitor, CombineModulesVisitor,
5    IdentifyFieldTypesVisitor, KorokVisitable, SetAccountsVisitor, SetDefinedTypesVisitor,
6    SetErrorsVisitor, SetInstructionsVisitor, SetProgramMetadataVisitor,
7};
8
9pub struct DefaultPlugin;
10impl KorokPlugin for DefaultPlugin {
11    fn on_fields_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
12        visitable.accept(&mut IdentifyFieldTypesVisitor::new())?;
13        visitable.accept(&mut ApplyTypeOverridesVisitor::new())?;
14        visitable.accept(&mut ApplyTypeModifiersVisitor::new())?;
15        Ok(())
16    }
17
18    fn on_program_items_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
19        visitable.accept(&mut SetDefinedTypesVisitor::new())?;
20        visitable.accept(&mut SetAccountsVisitor::new())?;
21        visitable.accept(&mut SetInstructionsVisitor::new())?;
22        visitable.accept(&mut SetErrorsVisitor::new())?;
23        Ok(())
24    }
25
26    fn on_root_node_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
27        visitable.accept(&mut SetProgramMetadataVisitor::new())?;
28        visitable.accept(&mut CombineModulesVisitor::new())?;
29        Ok(())
30    }
31}