rust_mcp_sdk/mcp_http/
error.rs1use thiserror::Error;
2
3pub type McpHttpResult<T> = core::result::Result<T, McpHttpError>;
4
5#[derive(Debug, Clone, Error)]
6pub enum McpHttpError {
7 #[error("'sessionId' query string is missing!")]
8 SessionIdMissing,
9
10 #[error("No session found for the given ID: {0}.")]
11 SessionIdInvalid(String),
12
13 #[error("Stream IO Error: {0}.")]
14 StreamIoError(String),
15
16 #[error("{0}")]
17 HttpError(String),
18
19 #[error("{0}")]
20 TransportError(String),
21}
22
23#[cfg(test)]
24mod tests {
25 use super::*;
26
27 #[test]
28 fn display_session_id_missing() {
29 let err = McpHttpError::SessionIdMissing;
30 assert_eq!(format!("{}", err), "'sessionId' query string is missing!");
31 }
32
33 #[test]
34 fn display_session_id_invalid() {
35 let err = McpHttpError::SessionIdInvalid("abc-123".into());
36 assert_eq!(
37 format!("{}", err),
38 "No session found for the given ID: abc-123."
39 );
40 }
41
42 #[test]
43 fn display_stream_io_error() {
44 let err = McpHttpError::StreamIoError("broken pipe".into());
45 assert_eq!(format!("{}", err), "Stream IO Error: broken pipe.");
46 }
47
48 #[test]
49 fn display_http_error() {
50 let err = McpHttpError::HttpError("bad request".into());
51 assert_eq!(format!("{}", err), "bad request");
52 }
53
54 #[test]
55 fn display_transport_error() {
56 let err = McpHttpError::TransportError("timeout".into());
57 assert_eq!(format!("{}", err), "timeout");
58 }
59
60 #[test]
61 fn clone_preserves_value() {
62 let err = McpHttpError::SessionIdInvalid("xyz".into());
63 let cloned = err.clone();
64 assert_eq!(format!("{}", err), format!("{}", cloned));
65 }
66
67 #[test]
68 fn debug_format_includes_variant() {
69 let err = McpHttpError::SessionIdMissing;
70 let debug = format!("{:?}", err);
71 assert!(debug.contains("SessionIdMissing"));
72 }
73
74 #[test]
75 fn clone_unit_variant() {
76 let err = McpHttpError::SessionIdMissing;
77 let cloned = err.clone();
78 assert_eq!(format!("{:?}", err), format!("{:?}", cloned));
79 }
80
81 #[test]
82 fn http_result_ok() {
83 let result: McpHttpResult<i32> = Ok(42);
84 assert_eq!(result.unwrap(), 42);
85 }
86
87 #[test]
88 fn http_result_err() {
89 let result: McpHttpResult<i32> = Err(McpHttpError::HttpError("fail".into()));
90 assert!(result.is_err());
91 assert_eq!(format!("{}", result.unwrap_err()), "fail");
92 }
93}