1 unstable release
0.1.0 | Nov 1, 2024 |
---|
#353 in Magic Beans
146 downloads per month
Used in solana-include-idl-cli
10KB
127 lines
solana-include-idl
A collection of macro and helpers to manage IDLs stored on the program binary.
IDL files describe the structure and API of a Solana program, facilitating easier integration and interaction with various client applications. This crate automates the task of publishing the IDL file by storing it as a separate ELF section within the program binary.
Usage
The crate provides a macro that includes the type and contents of the IDL file in separate ELF sections on the program binary.
.idl.type
contains the type of the IDL file..idl.data
contains the IDL file itself.
The macro takes two arguments:
type
: The type of the IDL file. This should be one of the variants of theIdlType
enum (e.g.,IdlType::Anchor
orIdlType::Codama
).file
: The path to the IDL file.
use include_idl::{include_idl, parse::IdlType};
include_idl!(IdlType::Codama, concat!(env!("OUT_DIR"), "/codama.idl.zip"));
In general, the macro is used in combination with a build.rs
build script to compress the IDL file, reducing the space required on the program binary.
To specify a build script, add a build = "build.rs"
entry to your Cargo.toml
file under the [package]
section. Below is a build.rs
example file that compresses an existing IDL file.
use std::env;
use std::path::PathBuf;
use include_idl::compress_idl;
fn main() {
// Get the IDL path.
let idl_path = PathBuf::from("../api").join("idl.json");
// Compress the IDL file to a zip file.
let out_dir = env::var("OUT_DIR").unwrap();
let dest_path = PathBuf::from(out_dir).join("codama.idl.zip");
compress_idl(&idl_path, &dest_path);
}
Generating an IDL
If you are using Anchor, this step is alredy done for your. If you are writing a native Solana program or using a framework that does not export and IDL, you can use Codama.
Dependencies
~0–590KB
~12K SLoC