Skip to main content

codama_plugin_core/
default_plugin.rs

1use crate::KorokPlugin;
2use codama_errors::CodamaResult;
3use codama_korok_visitors::{
4    ApplyDisplayVisitor, ApplyTypeModifiersVisitor, ApplyTypeOverridesVisitor,
5    CombineModulesVisitor, IdentifyFieldTypesVisitor, KorokVisitable, SetAccountsVisitor,
6    SetDefaultValuesVisitor, SetDefinedTypesVisitor, SetErrorsVisitor, SetEventsVisitor,
7    SetInstructionsVisitor, SetPdasVisitor, 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 ApplyDisplayVisitor::new())?;
17        visitable.accept(&mut SetDefaultValuesVisitor::new())?;
18        Ok(())
19    }
20
21    fn on_program_items_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
22        visitable.accept(&mut SetDefinedTypesVisitor::new())?;
23        visitable.accept(&mut SetPdasVisitor::new())?;
24        visitable.accept(&mut SetAccountsVisitor::new())?;
25        visitable.accept(&mut SetInstructionsVisitor::new())?;
26        visitable.accept(&mut SetErrorsVisitor::new())?;
27        visitable.accept(&mut SetEventsVisitor::new())?;
28        Ok(())
29    }
30
31    fn on_root_node_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
32        visitable.accept(&mut SetProgramMetadataVisitor::new())?;
33        visitable.accept(&mut CombineModulesVisitor::new())?;
34        Ok(())
35    }
36}