1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub enum ReplRequest {
10 Eval { source: String },
12
13 Load { path: String },
15
16 Reset,
18
19 Status,
21
22 Shutdown,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
28pub enum ReplResponse {
29 Value { value: String },
31
32 Error { message: String },
34
35 Status { tier1_count: usize, tier2_count: usize, tier3_count: usize },
37
38 Ok,
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_request_serialization() {
48 let req = ReplRequest::Eval { source: "(+ 1 2)".to_string() };
49 let json = serde_json::to_string(&req).unwrap();
50 let parsed: ReplRequest = serde_json::from_str(&json).unwrap();
51
52 match parsed {
53 ReplRequest::Eval { source } => assert_eq!(source, "(+ 1 2)"),
54 _ => panic!("Wrong variant"),
55 }
56 }
57
58 #[test]
59 fn test_request_load() {
60 let req = ReplRequest::Load { path: "test.ox".to_string() };
61 match req {
62 ReplRequest::Load { path } => assert_eq!(path, "test.ox"),
63 _ => panic!("Wrong variant"),
64 }
65 }
66
67 #[test]
68 fn test_request_reset() {
69 let req = ReplRequest::Reset;
70 match req {
71 ReplRequest::Reset => (),
72 _ => panic!("Wrong variant"),
73 }
74 }
75
76 #[test]
77 fn test_request_status() {
78 let req = ReplRequest::Status;
79 match req {
80 ReplRequest::Status => (),
81 _ => panic!("Wrong variant"),
82 }
83 }
84
85 #[test]
86 fn test_request_shutdown() {
87 let req = ReplRequest::Shutdown;
88 match req {
89 ReplRequest::Shutdown => (),
90 _ => panic!("Wrong variant"),
91 }
92 }
93
94 #[test]
95 fn test_response_value() {
96 let resp = ReplResponse::Value { value: "42".to_string() };
97 match resp {
98 ReplResponse::Value { value } => assert_eq!(value, "42"),
99 _ => panic!("Wrong variant"),
100 }
101 }
102
103 #[test]
104 fn test_response_error() {
105 let resp = ReplResponse::Error { message: "error".to_string() };
106 match resp {
107 ReplResponse::Error { message } => assert_eq!(message, "error"),
108 _ => panic!("Wrong variant"),
109 }
110 }
111
112 #[test]
113 fn test_response_status() {
114 let resp = ReplResponse::Status { tier1_count: 1, tier2_count: 2, tier3_count: 3 };
115 match resp {
116 ReplResponse::Status { tier1_count, tier2_count, tier3_count } => {
117 assert_eq!(tier1_count, 1);
118 assert_eq!(tier2_count, 2);
119 assert_eq!(tier3_count, 3);
120 }
121 _ => panic!("Wrong variant"),
122 }
123 }
124
125 #[test]
126 fn test_response_ok() {
127 let resp = ReplResponse::Ok;
128 match resp {
129 ReplResponse::Ok => (),
130 _ => panic!("Wrong variant"),
131 }
132 }
133
134 #[test]
135 fn test_request_clone() {
136 let req = ReplRequest::Eval { source: "test".to_string() };
137 let cloned = req.clone();
138 match cloned {
139 ReplRequest::Eval { source } => assert_eq!(source, "test"),
140 _ => panic!("Wrong variant"),
141 }
142 }
143
144 #[test]
145 fn test_response_clone() {
146 let resp = ReplResponse::Value { value: "test".to_string() };
147 let cloned = resp.clone();
148 match cloned {
149 ReplResponse::Value { value } => assert_eq!(value, "test"),
150 _ => panic!("Wrong variant"),
151 }
152 }
153}