lisp_rpc_rust_server/
lib.rs1pub use lisp_rpc_rust_serializer::lisp_rpc_to_str;
2
3pub mod server;
4pub use server::*;
5
6#[derive(Debug, Clone, PartialEq)]
7pub enum RPCType {
8 Msg(String),
9 RPC(String),
10 Map,
11 List,
12
13 V,
15}
16
17pub trait ToRPCType: Send + Sync {
19 fn to_rpc_type() -> RPCType
20 where
21 Self: Sized,
22 {
23 RPCType::V
24 }
25
26 fn serialize_lisp(&self) -> anyhow::Result<String>;
28}
29
30#[macro_export]
31macro_rules! impl_to_rpc {
32 ($t:ty, $rpc:expr) => {
33 impl ToRPCType for $t {
34 fn to_rpc_type() -> RPCType {
35 $rpc
36 }
37 fn serialize_lisp(&self) -> anyhow::Result<String> {
38 lisp_rpc_to_str(self).map_err(|e| anyhow::anyhow!(e))
39 }
40 }
41 };
42}
43
44macro_rules! impl_to_rpc_basic {
45 ($($t:ty),*) => {
46 $(
47 impl ToRPCType for $t {
48 fn serialize_lisp(&self) -> anyhow::Result<String> {
49 lisp_rpc_to_str(self).map_err(|e| anyhow::anyhow!(e))
50 }
51 }
52 )*
53 };
54}
55
56impl_to_rpc_basic!(
57 bool,
58 char,
59 i8,
60 i16,
61 i32,
62 i64,
63 isize,
64 u8,
65 u16,
66 u32,
67 u64,
68 usize,
69 f32,
70 f64,
71 String,
72 &str,
73 ()
74);
75
76#[cfg(test)]
77mod tests {
78 use super::*;
79
80 #[test]
81 fn test_primitive_types_impl_to_rpc() {
82 let val_bool = true;
83 let val_char = 'a';
84 let val_i8 = 1i8;
85 let val_i16 = 2i16;
86 let val_i32 = 3i32;
87 let val_i64 = 4i64;
88 let val_isize = 6isize;
89 let val_u8 = 7u8;
90 let val_u16 = 8u16;
91 let val_u32 = 9u32;
92 let val_u64 = 10u64;
93 let val_usize = 12usize;
94 let val_f32 = 13.0f32;
95 let val_f64 = 14.0f64;
96 let val_str = "hello";
97 let val_string = "world".to_string();
98 let val_unit = ();
99
100 assert!(val_bool.serialize_lisp().is_ok());
101 assert!(val_char.serialize_lisp().is_ok());
102 assert!(val_i8.serialize_lisp().is_ok());
103 assert!(val_i16.serialize_lisp().is_ok());
104 assert!(val_i32.serialize_lisp().is_ok());
105 assert!(val_i64.serialize_lisp().is_ok());
106 assert!(val_isize.serialize_lisp().is_ok());
107 assert!(val_u8.serialize_lisp().is_ok());
108 assert!(val_u16.serialize_lisp().is_ok());
109 assert!(val_u32.serialize_lisp().is_ok());
110 assert!(val_u64.serialize_lisp().is_ok());
111 assert!(val_usize.serialize_lisp().is_ok());
112 assert!(val_f32.serialize_lisp().is_ok());
113 assert!(val_f64.serialize_lisp().is_ok());
114 assert!(val_str.serialize_lisp().is_ok());
115 assert!(val_string.serialize_lisp().is_ok());
116 assert!(val_unit.serialize_lisp().is_ok());
117 }
118}