avalanche_types/jsonrpc/
admin.rs1use std::io::{self, Error as ioError, ErrorKind};
3
4use serde::{Deserialize, Serialize};
5
6const ALIAS_METHOD: &str = "admin.aliasChain";
8
9#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Clone)]
12pub struct ChainAliasRequest {
13 pub jsonrpc: String,
15 pub id: u32,
17 pub method: String,
19 pub params: Option<ChainAliasParams>,
21}
22
23impl Default for ChainAliasRequest {
24 fn default() -> Self {
25 Self {
26 jsonrpc: String::from(super::DEFAULT_VERSION),
27 id: super::DEFAULT_ID,
28 method: ALIAS_METHOD.to_string(),
29 params: None,
30 }
31 }
32}
33
34impl ChainAliasRequest {
35 pub fn encode_json(&self) -> io::Result<String> {
36 serde_json::to_string(&self)
37 .map_err(|e| ioError::new(ErrorKind::Other, format!("failed to serialize JSON {}", e)))
38 }
39}
40
41#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Clone)]
43pub struct ChainAliasParams {
44 pub chain: String,
46 pub alias: String,
48}
49
50#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Clone)]
52pub struct ChainAliasResponse {
53 pub jsonrpc: String,
55 pub id: u32,
57}
58
59#[cfg(test)]
60mod tests {
61 use crate::jsonrpc::admin::{ChainAliasParams, ChainAliasRequest, ChainAliasResponse};
62 use crate::jsonrpc::{DEFAULT_ID, DEFAULT_VERSION};
63
64 #[test]
65 fn test_serialization() {
66 let chain = String::from("sV6o671RtkGBcno1FiaDbVcFv2sG5aVXMZYzKdP4VQAWmJQnM");
67 let alias = String::from("devnet");
68
69 let req = ChainAliasRequest {
70 params: Some(ChainAliasParams { chain, alias }),
71 ..Default::default()
72 };
73
74 let serialized = req.encode_json().expect("failed serialization");
75
76 let expected: &str = r#"{"jsonrpc":"2.0","id":1,"method":"admin.aliasChain","params":{"chain":"sV6o671RtkGBcno1FiaDbVcFv2sG5aVXMZYzKdP4VQAWmJQnM","alias":"devnet"}}"#;
77 assert_eq!(serialized, expected);
78 }
79
80 #[test]
81 fn test_deserialization() {
82 let expected = ChainAliasResponse {
83 jsonrpc: String::from(DEFAULT_VERSION),
84 id: DEFAULT_ID,
85 };
86
87 let response = r#"{"jsonrpc": "2.0","id": 1,"result": {}}"#.as_bytes();
88 let deserialized: ChainAliasResponse =
89 serde_json::from_slice(response).expect("failed deserialization");
90
91 assert_eq!(expected, deserialized);
92 }
93}