1#![warn(missing_docs)]
24#![deny(unused_crate_dependencies)]
25
26use serde::{Deserialize, Serialize};
27use sp_core::hexdisplay::{AsBytesRef, HexDisplay};
28
29mod common;
30
31pub mod archive;
32pub mod chain_head;
33pub mod chain_spec;
34pub mod transaction;
35
36pub type SubscriptionTaskExecutor = std::sync::Arc<dyn sp_core::traits::SpawnNamed>;
38
39#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
41#[serde(untagged)]
42pub enum MethodResult {
43 Ok(MethodResultOk),
45 Err(MethodResultErr),
47}
48
49impl MethodResult {
50 pub fn ok(result: impl Into<String>) -> MethodResult {
52 MethodResult::Ok(MethodResultOk { success: true, result: result.into() })
53 }
54
55 pub fn err(error: impl Into<String>) -> MethodResult {
57 MethodResult::Err(MethodResultErr { success: false, error: error.into() })
58 }
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
63#[serde(rename_all = "camelCase")]
64pub struct MethodResultOk {
65 success: bool,
67 pub result: String,
69}
70
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct MethodResultErr {
75 success: bool,
77 pub error: String,
79}
80
81pub fn hex_string<Data: AsBytesRef>(data: &Data) -> String {
83 format!("0x{:?}", HexDisplay::from(data))
84}
85
86#[cfg(test)]
87mod tests {
88 use super::*;
89
90 #[test]
91 fn method_result_ok() {
92 let ok = MethodResult::ok("hello");
93
94 let ser = serde_json::to_string(&ok).unwrap();
95 let exp = r#"{"success":true,"result":"hello"}"#;
96 assert_eq!(ser, exp);
97
98 let ok_dec: MethodResult = serde_json::from_str(exp).unwrap();
99 assert_eq!(ok_dec, ok);
100 }
101
102 #[test]
103 fn method_result_error() {
104 let ok = MethodResult::err("hello");
105
106 let ser = serde_json::to_string(&ok).unwrap();
107 let exp = r#"{"success":false,"error":"hello"}"#;
108 assert_eq!(ser, exp);
109
110 let ok_dec: MethodResult = serde_json::from_str(exp).unwrap();
111 assert_eq!(ok_dec, ok);
112 }
113}