iota_json_rpc_types/
iota_protocol.rs1use std::collections::BTreeMap;
6
7use iota_protocol_config::{ProtocolConfig, ProtocolConfigValue, ProtocolVersion};
8use schemars::JsonSchema;
9use serde::{Deserialize, Serialize};
10use serde_with::{DisplayFromStr, serde_as};
11
12use crate::iota_primitives::ProtocolVersion as ProtocolVersionSchema;
13
14#[serde_as]
15#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, PartialEq)]
16#[serde(rename_all = "camelCase", rename = "ProtocolConfigValue")]
17pub enum IotaProtocolConfigValue {
18 U16(
19 #[schemars(with = "String")]
20 #[serde_as(as = "DisplayFromStr")]
21 u16,
22 ),
23 U32(
24 #[schemars(with = "String")]
25 #[serde_as(as = "DisplayFromStr")]
26 u32,
27 ),
28 U64(
29 #[schemars(with = "String")]
30 #[serde_as(as = "DisplayFromStr")]
31 u64,
32 ),
33 F64(
34 #[schemars(with = "String")]
35 #[serde_as(as = "DisplayFromStr")]
36 f64,
37 ),
38 Bool(
39 #[schemars(with = "String")]
40 #[serde_as(as = "DisplayFromStr")]
41 bool,
42 ),
43}
44
45impl From<ProtocolConfigValue> for IotaProtocolConfigValue {
46 fn from(value: ProtocolConfigValue) -> Self {
47 match value {
48 ProtocolConfigValue::u16(y) => IotaProtocolConfigValue::U16(y),
49 ProtocolConfigValue::u32(y) => IotaProtocolConfigValue::U32(y),
50 ProtocolConfigValue::u64(x) => IotaProtocolConfigValue::U64(x),
51 ProtocolConfigValue::bool(z) => IotaProtocolConfigValue::Bool(z),
52 }
53 }
54}
55
56#[serde_as]
57#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, PartialEq)]
58#[serde(rename_all = "camelCase", rename = "ProtocolConfig")]
59pub struct ProtocolConfigResponse {
60 #[schemars(with = "ProtocolVersionSchema")]
61 #[serde_as(as = "ProtocolVersionSchema")]
62 pub min_supported_protocol_version: ProtocolVersion,
63 #[schemars(with = "ProtocolVersionSchema")]
64 #[serde_as(as = "ProtocolVersionSchema")]
65 pub max_supported_protocol_version: ProtocolVersion,
66 #[schemars(with = "ProtocolVersionSchema")]
67 #[serde_as(as = "ProtocolVersionSchema")]
68 pub protocol_version: ProtocolVersion,
69 pub feature_flags: BTreeMap<String, bool>,
70 pub attributes: BTreeMap<String, Option<IotaProtocolConfigValue>>,
71}
72
73impl From<ProtocolConfig> for ProtocolConfigResponse {
74 fn from(config: ProtocolConfig) -> Self {
75 ProtocolConfigResponse {
76 protocol_version: config.version,
77 attributes: config
78 .attr_map()
79 .into_iter()
80 .map(|(k, v)| (k, v.map(IotaProtocolConfigValue::from)))
81 .collect(),
82 min_supported_protocol_version: ProtocolVersion::MIN,
83 max_supported_protocol_version: ProtocolVersion::MAX,
84 feature_flags: config.feature_map(),
85 }
86 }
87}