Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pinax-network/antelope-abi2rs
Generate Rust type definitions from Antelope ABI
https://github.com/pinax-network/antelope-abi2rs
Last synced: 21 days ago
JSON representation
Generate Rust type definitions from Antelope ABI
- Host: GitHub
- URL: https://github.com/pinax-network/antelope-abi2rs
- Owner: pinax-network
- License: mit
- Created: 2023-03-24T01:15:37.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-06-16T03:11:29.000Z (over 1 year ago)
- Last Synced: 2025-01-05T12:04:15.860Z (29 days ago)
- Language: TypeScript
- Size: 214 KB
- Stars: 0
- Watchers: 5
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# antelope-abi2rs
Command line tool to generate Rust type definitions from Antelope ABI
Inspired by [eosio-abi2ts](https://github.com/greymass/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
-------```rust
$ 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 {
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
------
```rust
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,
}
}
}
```