Skip to main content

typhoon_idl_generator/
plugin.rs

1use {
2    crate::visitors::{
3        ContextVisitor, DefineTypeResolver, InstructionResolver, RouterVisitor, SetAccountVisitor,
4        SetErrorsVisitor, SetProgramIdVisitor,
5    },
6    codama::{
7        ApplyTypeModifiersVisitor, ApplyTypeOverridesVisitor, CodamaResult, CombineModulesVisitor,
8        IdentifyFieldTypesVisitor, SetDefaultValuesVisitor, SetProgramMetadataVisitor,
9    },
10    codama_korok_visitors::KorokVisitable,
11    codama_plugin_core::KorokPlugin,
12};
13
14pub struct TyphoonPlugin;
15
16impl KorokPlugin for TyphoonPlugin {
17    fn on_initialized(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
18        visitable.accept(&mut RouterVisitor::new())?;
19        Ok(())
20    }
21
22    fn on_fields_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
23        // visitable.accept(&mut SetPdasVisitor::new())?; //TODO seeds and seeded
24        visitable.accept(&mut IdentifyFieldTypesVisitor::new())?;
25        visitable.accept(&mut ApplyTypeOverridesVisitor::new())?;
26        visitable.accept(&mut ApplyTypeModifiersVisitor::new())?;
27        visitable.accept(&mut SetDefaultValuesVisitor::new())?;
28        Ok(())
29    }
30
31    fn on_program_items_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
32        visitable.accept(&mut ContextVisitor::new())?;
33        visitable.accept(&mut SetErrorsVisitor::new())?;
34        visitable.accept(&mut SetAccountVisitor::new())?;
35        Ok(())
36    }
37
38    fn on_root_node_set(&self, visitable: &mut dyn KorokVisitable) -> CodamaResult<()> {
39        visitable.accept(&mut SetProgramIdVisitor::new())?;
40        visitable.accept(&mut SetProgramMetadataVisitor::new())?;
41        visitable.accept(&mut CombineModulesVisitor::new())?;
42        visitable.accept(&mut InstructionResolver::new())?;
43        visitable.accept(&mut DefineTypeResolver::new())?;
44        Ok(())
45    }
46}