typhoon_idl_generator/
lib.rs

1mod 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}