antelope-abi2rs
v0.4.1
Published
Generate Rust type defenitions from Antelope ABI files
Downloads
8
Readme
antelope-abi2rs
Command line tool to generate Rust type definitions from Antelope ABI Inspired by eosio-abi2ts
Installation
npm install -g antelope-abi2rs
or
yarn global add antelope-abi2rs
Usage
$ antelope-abi2rs -h
usage: antelope-abi2rs [-h] [-v] [-i INPUT] [-p PREFIX] [-n INDENT] [-t] [-e]
[-a | -c | -s]
[output]
Positional arguments:
output Output file to write to instead of stdout.
Optional arguments:
-h, --help Show this help message and exit.
-v, --version Show program's version number and exit.
-i INPUT, --input INPUT
Read ABI JSON from file instead of stdin.
-p PREFIX, --prefix PREFIX
Prefix to add to every type.
-n INDENT, --indent INDENT
How many spaces or tabs to indend with.
-t, --use-tabs Use tabs instead of spaces for indentation.
-a, --pascal-case Format types using PascalCase (default).
-c, --camel-case Format types using camelCase.
-s, --snake-case Format types using snake_case.
Example
$ antelope-abi2rs -i eosio.token.abi
// Generated by antelope-abi2rs 0.3.1 - eosio::abi/1.1
use serde::{Deserialize, Serialize};
type Asset = String;
type Name = String;
type Symbol = String;
macro_rules! impl_try_from_str {
($type:ty) => {
impl TryFrom<&str> for $type {
type Error = serde_json::Error;
#[inline]
fn try_from(str: &str) -> Result<Self, Self::Error> {
serde_json::from_str(str)
}
}
};
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct Account {
pub balance: Asset,
}
impl_try_from_str!(Account);
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct Close {
pub owner: Name,
pub symbol: Symbol,
}
impl_try_from_str!(Close);
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct Create {
pub issuer: Name,
pub maximum_supply: Asset,
}
impl_try_from_str!(Create);
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct CurrencyStats {
pub supply: Asset,
pub max_supply: Asset,
pub issuer: Name,
}
impl_try_from_str!(CurrencyStats);
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct Issue {
pub to: Name,
pub quantity: Asset,
pub memo: String,
}
impl_try_from_str!(Issue);
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct Open {
pub owner: Name,
pub symbol: Symbol,
pub ram_payer: Name,
}
impl_try_from_str!(Open);
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct Retire {
pub quantity: Asset,
pub memo: String,
}
impl_try_from_str!(Retire);
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct Transfer {
pub from: Name,
pub to: Name,
pub quantity: Asset,
pub memo: String,
}
impl_try_from_str!(Transfer);
Stdin
eosc -u https://eos.greymass.com get abi eosio.evm | antelope-abi2rs src/abi.rs
Usage
for trx in block.all_transaction_traces() {
for trace in &trx.action_traces {
let action_trace = trace.action.as_ref().unwrap();
if action_trace.name != "transfer" { continue; }
match abi::Transfer::try_from(action_trace.json_data.as_str()) {
Ok(transfer) => {
log::info!("Transfer! {:?}", transfer)
}
Err(_) => continue,
}
}
}