Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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,
}
}
}
```