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, SetDefaultValuesVisitor,
6    SetDefinedTypesVisitor, SetErrorsVisitor, SetInstructionsVisitor, SetPdasVisitor,
7    SetProgramMetadataVisitor,
8};
9
10pub struct DefaultPlugin;
11impl KorokPlugin for DefaultPlugin {
12    fn on_fields_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
13        visitable.accept(&mut IdentifyFieldTypesVisitor::new())?;
14        visitable.accept(&mut ApplyTypeOverridesVisitor::new())?;
15        visitable.accept(&mut ApplyTypeModifiersVisitor::new())?;
16        visitable.accept(&mut SetDefaultValuesVisitor::new())?;
17        Ok(())
18    }
19
20    fn on_program_items_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
21        visitable.accept(&mut SetDefinedTypesVisitor::new())?;
22        visitable.accept(&mut SetPdasVisitor::new())?;
23        visitable.accept(&mut SetAccountsVisitor::new())?;
24        visitable.accept(&mut SetInstructionsVisitor::new())?;
25        visitable.accept(&mut SetErrorsVisitor::new())?;
26        Ok(())
27    }
28
29    fn on_root_node_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
30        visitable.accept(&mut SetProgramMetadataVisitor::new())?;
31        visitable.accept(&mut CombineModulesVisitor::new())?;
32        Ok(())
33    }
34}