sc_rpc_spec_v2/archive/
types.rs1use serde::{Deserialize, Serialize};
20
21#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
23#[serde(untagged)]
24pub enum MethodResult {
25 Ok(MethodResultOk),
27 Err(MethodResultErr),
29}
30
31impl MethodResult {
32 pub fn ok(result: impl Into<String>) -> MethodResult {
34 MethodResult::Ok(MethodResultOk { success: true, value: result.into() })
35 }
36
37 pub fn err(error: impl Into<String>) -> MethodResult {
39 MethodResult::Err(MethodResultErr { success: false, error: error.into() })
40 }
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct MethodResultOk {
47 pub success: bool,
49 pub value: String,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
55#[serde(rename_all = "camelCase")]
56pub struct MethodResultErr {
57 pub success: bool,
59 pub error: String,
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 #[test]
68 fn method_result_ok() {
69 let ok = MethodResult::ok("hello");
70
71 let ser = serde_json::to_string(&ok).unwrap();
72 let exp = r#"{"success":true,"value":"hello"}"#;
73 assert_eq!(ser, exp);
74
75 let ok_dec: MethodResult = serde_json::from_str(exp).unwrap();
76 assert_eq!(ok_dec, ok);
77 }
78
79 #[test]
80 fn method_result_error() {
81 let ok = MethodResult::err("hello");
82
83 let ser = serde_json::to_string(&ok).unwrap();
84 let exp = r#"{"success":false,"error":"hello"}"#;
85 assert_eq!(ser, exp);
86
87 let ok_dec: MethodResult = serde_json::from_str(exp).unwrap();
88 assert_eq!(ok_dec, ok);
89 }
90}