antelope/chain/
abi.rs

1use crate::chain::{Decoder, Encoder, Packer};
2use antelope_client_macros::StructPacker;
3use serde::{Deserialize, Serialize};
4
5use crate::{
6    chain::name::{deserialize_name, Name},
7    // serializer::{Decoder, Encoder, Packer},
8};
9
10#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
11pub struct ABI {
12    pub version: String,
13    #[serde(default)]
14    pub types: Vec<AbiTypeDef>,
15    #[serde(default)]
16    pub structs: Vec<AbiStruct>,
17    #[serde(default)]
18    pub actions: Vec<AbiAction>,
19    #[serde(default)]
20    pub tables: Vec<AbiTable>,
21    #[serde(default)]
22    pub ricardian_clauses: Vec<AbiClause>,
23    #[serde(default)]
24    error_messages: Vec<String>,
25    #[serde(default)]
26    abi_extensions: Vec<String>,
27    #[serde(default)]
28    pub variants: Vec<AbiVariant>,
29    #[serde(default)]
30    pub action_results: Vec<AbiActionResult>,
31    // kv_tables: {}
32}
33
34impl ABI {
35    pub fn from_string(str: &str) -> Result<Self, String> {
36        let mut abi = serde_json::from_str::<ABI>(str).unwrap();
37        abi.error_messages = vec![];
38        abi.abi_extensions = vec![];
39        Ok(abi)
40    }
41}
42
43#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
44pub struct AbiTypeDef {
45    pub new_type_name: String,
46    pub r#type: String,
47}
48
49#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
50pub struct AbiField {
51    pub name: String,
52    pub r#type: String,
53}
54
55#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
56pub struct AbiStruct {
57    pub name: String,
58    pub base: String,
59    pub fields: Vec<AbiField>,
60}
61
62#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
63pub struct AbiVariant {
64    pub name: String,
65    pub types: Vec<String>,
66}
67
68#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
69pub struct AbiAction {
70    #[serde(deserialize_with = "deserialize_name")]
71    pub name: Name,
72    pub r#type: String,
73    pub ricardian_contract: String,
74}
75
76#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
77pub struct AbiTable {
78    #[serde(deserialize_with = "deserialize_name")]
79    pub name: Name,
80    pub index_type: String,
81    #[serde(default)]
82    pub key_names: Vec<String>,
83    #[serde(default)]
84    pub key_types: Vec<String>,
85    pub r#type: String,
86}
87
88#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
89pub struct AbiClause {
90    pub id: String,
91    pub body: String,
92}
93
94#[derive(Debug, Clone, Default, Eq, PartialEq, Serialize, Deserialize, StructPacker)]
95pub struct AbiActionResult {
96    #[serde(deserialize_with = "deserialize_name")]
97    pub name: Name,
98    pub result_type: String,
99}