1#[cfg(all(feature = "no-std", not(test)))]
6use alloc::vec::Vec;
7
8#[cfg(all(feature = "no-std", not(test)))]
9use alloc::collections::btree_map::BTreeMap;
10#[cfg(any(feature = "default", feature = "std", test))]
11use std::collections::BTreeMap;
12
13use serde::{Deserialize, Serialize};
14
15use crate::contract::EthValueType;
16
17#[derive(Serialize, Deserialize, Debug)]
18#[serde(deny_unknown_fields)]
19pub struct LinkReference {
20 offsets: Vec<i64>,
21 length: u64,
22 name: String,
23}
24
25#[derive(Serialize, Deserialize, Debug)]
26#[serde(deny_unknown_fields)]
27enum LinkValueType {
28 #[serde(rename = "literal")]
29 Literal,
30 #[serde(rename = "reference")]
31 Reference,
32}
33
34#[derive(Serialize, Deserialize, Debug)]
35#[serde(deny_unknown_fields)]
36pub struct LinkValue {
37 offsets: Vec<i64>,
38 #[serde(rename = "type")]
39 type_property: LinkValueType,
40 value: String,
41}
42
43#[derive(Serialize, Deserialize, Debug)]
44#[serde(deny_unknown_fields)]
45pub struct CompilerInformation {
46 name: CompilerType,
47 version: String,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 settings: Option<CompilerSettings>,
50}
51
52#[derive(Serialize, Deserialize, Debug)]
53#[serde(deny_unknown_fields)]
54pub enum CompilerType {
55 #[serde(rename = "solc")]
56 Solc,
57 #[serde(rename = "vyper")]
58 Vyper,
59}
60
61#[derive(Serialize, Deserialize, Debug)]
62#[serde(deny_unknown_fields)]
63pub struct CompilerSettings {
64 optimize: bool,
65}
66
67#[derive(Serialize, Deserialize, Debug)]
68#[serde(deny_unknown_fields)]
69pub struct NatSpec {
70 #[serde(skip_serializing_if = "Option::is_none")]
71 compiler: Option<CompilerInformation>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 author: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 methods: Option<BTreeMap<String, Method>>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 title: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 description: Option<String>,
80 #[serde(rename = "type")]
81 #[serde(skip_serializing_if = "Option::is_none")]
82 type_property: Option<String>,
83 #[serde(skip_serializing_if = "Option::is_none")]
84 dev: Option<String>,
85}
86
87#[derive(Serialize, Deserialize, Debug)]
88#[serde(deny_unknown_fields)]
89pub struct Method {
90 #[serde(skip_serializing_if = "Option::is_none")]
91 details: Option<String>,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 params: Option<BTreeMap<String, String>>,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 notice: Option<String>,
96 #[serde(rename = "return")]
97 #[serde(skip_serializing_if = "Option::is_none")]
98 return_property: Option<EthValueType>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 dev: Option<String>,
101}