multiversx_sc_meta_lib/abi_json/
build_info_abi_json.rs

1use multiversx_sc::abi::{BuildInfoAbi, ContractCrateBuildAbi, FrameworkBuildAbi, RustcAbi};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct BuildInfoAbiJson {
7    #[serde(default)]
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub rustc: Option<RustcAbiJson>,
10    pub contract_crate: ContractCrateBuildAbiJson,
11    pub framework: FrameworkBuildAbiJson,
12}
13
14impl From<&BuildInfoAbi> for BuildInfoAbiJson {
15    fn from(abi: &BuildInfoAbi) -> Self {
16        BuildInfoAbiJson {
17            rustc: abi.rustc.as_ref().map(RustcAbiJson::from),
18            contract_crate: ContractCrateBuildAbiJson::from(&abi.contract_crate),
19            framework: FrameworkBuildAbiJson::from(&abi.framework),
20        }
21    }
22}
23
24impl From<&BuildInfoAbiJson> for BuildInfoAbi {
25    fn from(abi_json: &BuildInfoAbiJson) -> Self {
26        BuildInfoAbi {
27            rustc: abi_json.rustc.as_ref().map(RustcAbi::from),
28            contract_crate: ContractCrateBuildAbi::from(&abi_json.contract_crate),
29            framework: FrameworkBuildAbi::from(&abi_json.framework),
30        }
31    }
32}
33
34impl From<BuildInfoAbiJson> for BuildInfoAbi {
35    fn from(abi_json: BuildInfoAbiJson) -> Self {
36        BuildInfoAbi::from(&abi_json)
37    }
38}
39
40#[derive(Serialize, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct RustcAbiJson {
43    pub version: String,
44    pub commit_hash: String,
45    pub commit_date: String,
46    #[serde(default)]
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub build_date: Option<String>,
49    pub channel: String,
50    #[serde(default)]
51    pub host: String,
52    pub short: String,
53    #[serde(default)]
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub llvm_version: Option<String>,
56}
57
58impl From<&RustcAbi> for RustcAbiJson {
59    fn from(abi: &RustcAbi) -> Self {
60        RustcAbiJson {
61            version: abi.version.clone(),
62            commit_hash: abi.commit_hash.clone(),
63            commit_date: abi.commit_date.clone(),
64            build_date: abi.build_date.clone(),
65            channel: abi.channel.clone(),
66            host: abi.host.clone(),
67            short: abi.short.clone(),
68            llvm_version: abi.llvm_version.clone(),
69        }
70    }
71}
72
73impl From<&RustcAbiJson> for RustcAbi {
74    fn from(abi_json: &RustcAbiJson) -> Self {
75        RustcAbi {
76            version: abi_json.version.clone(),
77            commit_hash: abi_json.commit_hash.clone(),
78            commit_date: abi_json.commit_date.clone(),
79            build_date: abi_json.build_date.clone(),
80            channel: abi_json.channel.clone(),
81            host: abi_json.host.clone(),
82            short: abi_json.short.clone(),
83            llvm_version: abi_json.llvm_version.clone(),
84        }
85    }
86}
87
88#[derive(Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct ContractCrateBuildAbiJson {
91    pub name: String,
92    pub version: String,
93    #[serde(default)]
94    #[serde(skip_serializing_if = "String::is_empty")]
95    pub git_version: String,
96}
97
98impl From<&ContractCrateBuildAbi> for ContractCrateBuildAbiJson {
99    fn from(abi: &ContractCrateBuildAbi) -> Self {
100        ContractCrateBuildAbiJson {
101            name: abi.name.to_string(),
102            version: abi.version.to_string(),
103            git_version: abi.git_version.to_string(),
104        }
105    }
106}
107
108impl From<&ContractCrateBuildAbiJson> for ContractCrateBuildAbi {
109    fn from(abi_json: &ContractCrateBuildAbiJson) -> Self {
110        ContractCrateBuildAbi {
111            name: abi_json.name.clone(),
112            version: abi_json.version.clone(),
113            git_version: abi_json.git_version.clone(),
114        }
115    }
116}
117
118impl From<ContractCrateBuildAbiJson> for ContractCrateBuildAbi {
119    fn from(abi: ContractCrateBuildAbiJson) -> Self {
120        ContractCrateBuildAbi::from(&abi)
121    }
122}
123
124#[derive(Serialize, Deserialize)]
125pub struct FrameworkBuildAbiJson {
126    pub name: String,
127    pub version: String,
128}
129
130impl From<&FrameworkBuildAbi> for FrameworkBuildAbiJson {
131    fn from(abi: &FrameworkBuildAbi) -> Self {
132        FrameworkBuildAbiJson {
133            name: abi.name.to_string(),
134            version: abi.version.to_string(),
135        }
136    }
137}
138
139impl From<&FrameworkBuildAbiJson> for FrameworkBuildAbi {
140    fn from(abi_json: &FrameworkBuildAbiJson) -> Self {
141        FrameworkBuildAbi {
142            name: abi_json.name.clone(),
143            version: abi_json.version.clone(),
144        }
145    }
146}
147
148impl From<FrameworkBuildAbiJson> for FrameworkBuildAbi {
149    fn from(abi: FrameworkBuildAbiJson) -> Self {
150        FrameworkBuildAbi::from(&abi)
151    }
152}