codama_korok_plugins/
default_plugin.rs1use crate::KorokPlugin;
2use codama_errors::CodamaResult;
3use codama_korok_visitors::{
4 ApplyCodamaTypeAttributesVisitor, CombineModulesVisitor, ComposeVisitor, FilterItemsVisitor,
5 KorokVisitable, SetAccountsVisitor, SetBorshTypesVisitor, SetDefinedTypesVisitor,
6 SetErrorsVisitor, SetInstructionsVisitor, SetLinkTypesVisitor, SetProgramMetadataVisitor,
7};
8use codama_koroks::KorokTrait;
9
10pub struct DefaultPlugin;
11impl KorokPlugin for DefaultPlugin {
12 fn run(
13 &self,
14 visitable: &mut dyn KorokVisitable,
15 next: &dyn Fn(&mut dyn KorokVisitable) -> CodamaResult<()>,
16 ) -> CodamaResult<()> {
17 next(visitable)?;
18 visitable.accept(&mut get_default_visitor())?;
19 Ok(())
20 }
21}
22
23pub fn get_default_visitor<'a>() -> ComposeVisitor<'a> {
24 ComposeVisitor::new()
25 .with(FilterItemsVisitor::new(
26 |item| item.attributes().unwrap().has_any_codama_derive(),
27 ComposeVisitor::new()
28 .with(SetBorshTypesVisitor::new())
29 .with(SetLinkTypesVisitor::new()),
30 ))
31 .with(SetProgramMetadataVisitor::new())
32 .with(ApplyCodamaTypeAttributesVisitor::new())
33 .with(SetDefinedTypesVisitor::new())
34 .with(SetAccountsVisitor::new())
35 .with(SetInstructionsVisitor::new())
36 .with(SetErrorsVisitor::new())
37 .with(CombineModulesVisitor::new())
38}