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 };
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 }
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}