multiversx_sc_meta_lib/abi_json/
build_info_abi_json.rs1use 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}