typhoon_idl_generator/
lib.rs1mod helpers;
2pub mod plugin;
3pub mod visitors;
4
5use {
6 crate::plugin::TyphoonPlugin,
7 codama::{Codama, CodamaResult, NodeTrait},
8 std::path::Path,
9};
10
11pub fn generate(crates: &[&Path]) -> CodamaResult<String> {
12 let codama = Codama::load_all(crates)
13 .map_err(|_| codama::CodamaError::NodeNotFound)?
14 .without_default_plugin()
15 .add_plugin(TyphoonPlugin);
16
17 let mut node = codama.get_idl()?;
18
19 for mut program in node.additional_programs.drain(..) {
20 if node.program.public_key.is_empty() {
21 node.program.public_key = program.public_key.clone();
22 }
23 node.program.errors.append(&mut program.errors);
24 node.program
25 .defined_types
26 .append(&mut program.defined_types);
27 node.program.accounts.append(&mut program.accounts);
28 }
29
30 node.to_json()
31}