Struct Response

Source
pub struct Response {
    pub jsonrpc: String,
    pub id: RequestId,
    pub result: Option<Value>,
    pub error: Option<ResponseError>,
}
Expand description

JSON-RPC response message JSON-RPC 响应消息

Fields§

§jsonrpc: String

Protocol version (must be “2.0”) 协议版本(必须为 “2.0”)

§id: RequestId

Request ID 请求 ID

§result: Option<Value>

Response result 响应结果

§error: Option<ResponseError>

Error if any 如果有错误

Implementations§

Source§

impl Response

Source

pub fn success(result: Value, id: RequestId) -> Self

Creates a new successful response 创建一个新的成功响应

Examples found in repository?
examples/stdio_server.rs (lines 69-75)
11async fn main() -> Result<()> {
12    // 跟踪会话中使用的请求 ID
13    // Track request IDs used in the session
14    let mut session_ids = HashSet::new();
15
16    // 配置 Stdio 服务器
17    // Configure Stdio server
18    let config = TransportConfig {
19        transport_type: TransportType::Stdio {
20            server_path: None,
21            server_args: None,
22        },
23        parameters: None,
24    };
25
26    // 创建服务器实例
27    // Create server instance
28    let factory = ServerTransportFactory;
29    let mut server = factory.create(config)?;
30
31    // 初始化服务器
32    // Initialize server
33    server.initialize().await?;
34    eprintln!("Server initialized and ready to receive messages...");
35
36    // 持续接收和处理消息
37    // Continuously receive and process messages
38    loop {
39        match server.receive().await {
40            Ok(message) => {
41                eprintln!("Received message: {:?}", message);
42
43                // 根据消息类型处理
44                // Process messages based on type
45                match message {
46                    Message::Request(request) => {
47                        // 验证请求 ID 的唯一性
48                        // Validate request ID uniqueness
49                        if !request.validate_id_uniqueness(&mut session_ids) {
50                            let error = Message::Response(Response::error(
51                                message::ResponseError {
52                                    code: message::error_codes::INVALID_REQUEST,
53                                    message: "Request ID has already been used".to_string(),
54                                    data: None,
55                                },
56                                request.id,
57                            ));
58                            if let Err(e) = server.send(error).await {
59                                eprintln!("Error sending error response: {}", e);
60                                break;
61                            }
62                            continue;
63                        }
64
65                        match request.method.as_str() {
66                            "prompts/execute" => {
67                                // 创建响应消息
68                                // Create response message
69                                let response = Message::Response(Response::success(
70                                    json!({
71                                        "content": "Hello from server!",
72                                        "role": "assistant"
73                                    }),
74                                    request.id,
75                                ));
76
77                                // 发送响应
78                                // Send response
79                                if let Err(e) = server.send(response).await {
80                                    eprintln!("Error sending response: {}", e);
81                                    break;
82                                }
83                            }
84                            _ => {
85                                eprintln!("Unknown method: {}", request.method);
86                                let error = Message::Response(Response::error(
87                                    message::ResponseError {
88                                        code: message::error_codes::METHOD_NOT_FOUND,
89                                        message: "Method not found".to_string(),
90                                        data: None,
91                                    },
92                                    request.id,
93                                ));
94                                if let Err(e) = server.send(error).await {
95                                    eprintln!("Error sending error response: {}", e);
96                                    break;
97                                }
98                            }
99                        }
100                    }
101                    _ => {
102                        eprintln!("Unexpected message type");
103                    }
104                }
105            }
106            Err(e) => {
107                eprintln!("Error receiving message: {}", e);
108                break;
109            }
110        }
111    }
112
113    // 关闭服务器
114    // Close server
115    server.close().await?;
116    Ok(())
117}
More examples
Hide additional examples
examples/lifecycle_server.rs (lines 92-108)
12async fn main() -> Result<()> {
13    // 跟踪会话中使用的请求 ID
14    // Track request IDs used in the session
15    let mut session_ids = HashSet::new();
16
17    // 配置 Stdio 服务器
18    // Configure Stdio server
19    let config = TransportConfig {
20        transport_type: TransportType::Stdio {
21            server_path: None,
22            server_args: None,
23        },
24        parameters: None,
25    };
26
27    // 创建服务器实例
28    // Create server instance
29    let factory = ServerTransportFactory;
30    let mut server = factory.create(config)?;
31    let mut initialized = false;
32
33    // 启动服务器
34    // Start server
35    eprintln!("Server starting...");
36    server.initialize().await?;
37
38    // 处理消息循环
39    // Message handling loop
40    loop {
41        match server.receive().await {
42            Ok(message) => {
43                match message {
44                    Message::Request(request) => {
45                        // 验证请求 ID 的唯一性
46                        // Validate request ID uniqueness
47                        if !request.validate_id_uniqueness(&mut session_ids) {
48                            let error = ResponseError {
49                                code: error_codes::INVALID_REQUEST,
50                                message: "Request ID has already been used".to_string(),
51                                data: None,
52                            };
53                            let response = Response::error(error, request.id);
54                            server.send(Message::Response(response)).await?;
55                            continue;
56                        }
57
58                        match request.method.as_str() {
59                            "initialize" => {
60                                // 处理初始化请求
61                                // Handle initialize request
62                                eprintln!("Received initialize request");
63
64                                // 解析客户端能力和版本
65                                // Parse client capabilities and version
66                                if let Some(params) = request.params {
67                                    let client_version = params
68                                        .get("protocolVersion")
69                                        .and_then(|v| v.as_str())
70                                        .unwrap_or("unknown");
71
72                                    // 版本检查
73                                    // Version check
74                                    if client_version != PROTOCOL_VERSION {
75                                        // 发送错误响应
76                                        // Send error response
77                                        let error = ResponseError {
78                                            code: error_codes::INVALID_REQUEST,
79                                            message: "Unsupported protocol version".to_string(),
80                                            data: Some(json!({
81                                                "supported": [PROTOCOL_VERSION],
82                                                "requested": client_version
83                                            })),
84                                        };
85                                        let response = Response::error(error, request.id);
86                                        server.send(Message::Response(response)).await?;
87                                        continue;
88                                    }
89
90                                    // 发送成功响应
91                                    // Send success response
92                                    let response = Response::success(
93                                        json!({
94                                            "protocolVersion": PROTOCOL_VERSION,
95                                            "capabilities": ServerCapabilities {
96                                                prompts: None,
97                                                resources: None,
98                                                tools: None,
99                                                logging: Some(json!({})),
100                                                experimental: None,
101                                            },
102                                            "serverInfo": ImplementationInfo {
103                                                name: "Example Server".to_string(),
104                                                version: "1.0.0".to_string(),
105                                            }
106                                        }),
107                                        request.id,
108                                    );
109                                    server.send(Message::Response(response)).await?;
110                                }
111                            }
112                            "shutdown" => {
113                                if !initialized {
114                                    // 如果未初始化,发送错误
115                                    // If not initialized, send error
116                                    let error = ResponseError {
117                                        code: error_codes::SERVER_NOT_INITIALIZED,
118                                        message: "Server not initialized".to_string(),
119                                        data: None,
120                                    };
121                                    let response = Response::error(error, request.id);
122                                    server.send(Message::Response(response)).await?;
123                                    continue;
124                                }
125
126                                // 发送成功响应
127                                // Send success response
128                                let response = Response::success(json!(null), request.id);
129                                server.send(Message::Response(response)).await?;
130
131                                // 等待退出通知
132                                // Wait for exit notification
133                                eprintln!("Server shutting down...");
134                                break;
135                            }
136                            _ => {
137                                if !initialized {
138                                    // 如果未初始化,拒绝其他请求
139                                    // If not initialized, reject other requests
140                                    let error = ResponseError {
141                                        code: error_codes::SERVER_NOT_INITIALIZED,
142                                        message: "Server not initialized".to_string(),
143                                        data: None,
144                                    };
145                                    let response = Response::error(error, request.id);
146                                    server.send(Message::Response(response)).await?;
147                                }
148                            }
149                        }
150                    }
151                    Message::Notification(notification) => match notification.method.as_str() {
152                        "initialized" => {
153                            eprintln!("Server initialized");
154                            initialized = true;
155                        }
156                        "exit" => {
157                            eprintln!("Received exit notification");
158                            break;
159                        }
160                        _ => {}
161                    },
162                    _ => {}
163                }
164            }
165            Err(e) => {
166                eprintln!("Error receiving message: {}", e);
167                break;
168            }
169        }
170    }
171
172    // 关闭服务器
173    // Close server
174    server.close().await?;
175    eprintln!("Server stopped");
176    Ok(())
177}
Source

pub fn error(error: ResponseError, id: RequestId) -> Self

Creates a new error response 创建一个新的错误响应

Examples found in repository?
examples/stdio_server.rs (lines 50-57)
11async fn main() -> Result<()> {
12    // 跟踪会话中使用的请求 ID
13    // Track request IDs used in the session
14    let mut session_ids = HashSet::new();
15
16    // 配置 Stdio 服务器
17    // Configure Stdio server
18    let config = TransportConfig {
19        transport_type: TransportType::Stdio {
20            server_path: None,
21            server_args: None,
22        },
23        parameters: None,
24    };
25
26    // 创建服务器实例
27    // Create server instance
28    let factory = ServerTransportFactory;
29    let mut server = factory.create(config)?;
30
31    // 初始化服务器
32    // Initialize server
33    server.initialize().await?;
34    eprintln!("Server initialized and ready to receive messages...");
35
36    // 持续接收和处理消息
37    // Continuously receive and process messages
38    loop {
39        match server.receive().await {
40            Ok(message) => {
41                eprintln!("Received message: {:?}", message);
42
43                // 根据消息类型处理
44                // Process messages based on type
45                match message {
46                    Message::Request(request) => {
47                        // 验证请求 ID 的唯一性
48                        // Validate request ID uniqueness
49                        if !request.validate_id_uniqueness(&mut session_ids) {
50                            let error = Message::Response(Response::error(
51                                message::ResponseError {
52                                    code: message::error_codes::INVALID_REQUEST,
53                                    message: "Request ID has already been used".to_string(),
54                                    data: None,
55                                },
56                                request.id,
57                            ));
58                            if let Err(e) = server.send(error).await {
59                                eprintln!("Error sending error response: {}", e);
60                                break;
61                            }
62                            continue;
63                        }
64
65                        match request.method.as_str() {
66                            "prompts/execute" => {
67                                // 创建响应消息
68                                // Create response message
69                                let response = Message::Response(Response::success(
70                                    json!({
71                                        "content": "Hello from server!",
72                                        "role": "assistant"
73                                    }),
74                                    request.id,
75                                ));
76
77                                // 发送响应
78                                // Send response
79                                if let Err(e) = server.send(response).await {
80                                    eprintln!("Error sending response: {}", e);
81                                    break;
82                                }
83                            }
84                            _ => {
85                                eprintln!("Unknown method: {}", request.method);
86                                let error = Message::Response(Response::error(
87                                    message::ResponseError {
88                                        code: message::error_codes::METHOD_NOT_FOUND,
89                                        message: "Method not found".to_string(),
90                                        data: None,
91                                    },
92                                    request.id,
93                                ));
94                                if let Err(e) = server.send(error).await {
95                                    eprintln!("Error sending error response: {}", e);
96                                    break;
97                                }
98                            }
99                        }
100                    }
101                    _ => {
102                        eprintln!("Unexpected message type");
103                    }
104                }
105            }
106            Err(e) => {
107                eprintln!("Error receiving message: {}", e);
108                break;
109            }
110        }
111    }
112
113    // 关闭服务器
114    // Close server
115    server.close().await?;
116    Ok(())
117}
More examples
Hide additional examples
examples/lifecycle_server.rs (line 53)
12async fn main() -> Result<()> {
13    // 跟踪会话中使用的请求 ID
14    // Track request IDs used in the session
15    let mut session_ids = HashSet::new();
16
17    // 配置 Stdio 服务器
18    // Configure Stdio server
19    let config = TransportConfig {
20        transport_type: TransportType::Stdio {
21            server_path: None,
22            server_args: None,
23        },
24        parameters: None,
25    };
26
27    // 创建服务器实例
28    // Create server instance
29    let factory = ServerTransportFactory;
30    let mut server = factory.create(config)?;
31    let mut initialized = false;
32
33    // 启动服务器
34    // Start server
35    eprintln!("Server starting...");
36    server.initialize().await?;
37
38    // 处理消息循环
39    // Message handling loop
40    loop {
41        match server.receive().await {
42            Ok(message) => {
43                match message {
44                    Message::Request(request) => {
45                        // 验证请求 ID 的唯一性
46                        // Validate request ID uniqueness
47                        if !request.validate_id_uniqueness(&mut session_ids) {
48                            let error = ResponseError {
49                                code: error_codes::INVALID_REQUEST,
50                                message: "Request ID has already been used".to_string(),
51                                data: None,
52                            };
53                            let response = Response::error(error, request.id);
54                            server.send(Message::Response(response)).await?;
55                            continue;
56                        }
57
58                        match request.method.as_str() {
59                            "initialize" => {
60                                // 处理初始化请求
61                                // Handle initialize request
62                                eprintln!("Received initialize request");
63
64                                // 解析客户端能力和版本
65                                // Parse client capabilities and version
66                                if let Some(params) = request.params {
67                                    let client_version = params
68                                        .get("protocolVersion")
69                                        .and_then(|v| v.as_str())
70                                        .unwrap_or("unknown");
71
72                                    // 版本检查
73                                    // Version check
74                                    if client_version != PROTOCOL_VERSION {
75                                        // 发送错误响应
76                                        // Send error response
77                                        let error = ResponseError {
78                                            code: error_codes::INVALID_REQUEST,
79                                            message: "Unsupported protocol version".to_string(),
80                                            data: Some(json!({
81                                                "supported": [PROTOCOL_VERSION],
82                                                "requested": client_version
83                                            })),
84                                        };
85                                        let response = Response::error(error, request.id);
86                                        server.send(Message::Response(response)).await?;
87                                        continue;
88                                    }
89
90                                    // 发送成功响应
91                                    // Send success response
92                                    let response = Response::success(
93                                        json!({
94                                            "protocolVersion": PROTOCOL_VERSION,
95                                            "capabilities": ServerCapabilities {
96                                                prompts: None,
97                                                resources: None,
98                                                tools: None,
99                                                logging: Some(json!({})),
100                                                experimental: None,
101                                            },
102                                            "serverInfo": ImplementationInfo {
103                                                name: "Example Server".to_string(),
104                                                version: "1.0.0".to_string(),
105                                            }
106                                        }),
107                                        request.id,
108                                    );
109                                    server.send(Message::Response(response)).await?;
110                                }
111                            }
112                            "shutdown" => {
113                                if !initialized {
114                                    // 如果未初始化,发送错误
115                                    // If not initialized, send error
116                                    let error = ResponseError {
117                                        code: error_codes::SERVER_NOT_INITIALIZED,
118                                        message: "Server not initialized".to_string(),
119                                        data: None,
120                                    };
121                                    let response = Response::error(error, request.id);
122                                    server.send(Message::Response(response)).await?;
123                                    continue;
124                                }
125
126                                // 发送成功响应
127                                // Send success response
128                                let response = Response::success(json!(null), request.id);
129                                server.send(Message::Response(response)).await?;
130
131                                // 等待退出通知
132                                // Wait for exit notification
133                                eprintln!("Server shutting down...");
134                                break;
135                            }
136                            _ => {
137                                if !initialized {
138                                    // 如果未初始化,拒绝其他请求
139                                    // If not initialized, reject other requests
140                                    let error = ResponseError {
141                                        code: error_codes::SERVER_NOT_INITIALIZED,
142                                        message: "Server not initialized".to_string(),
143                                        data: None,
144                                    };
145                                    let response = Response::error(error, request.id);
146                                    server.send(Message::Response(response)).await?;
147                                }
148                            }
149                        }
150                    }
151                    Message::Notification(notification) => match notification.method.as_str() {
152                        "initialized" => {
153                            eprintln!("Server initialized");
154                            initialized = true;
155                        }
156                        "exit" => {
157                            eprintln!("Received exit notification");
158                            break;
159                        }
160                        _ => {}
161                    },
162                    _ => {}
163                }
164            }
165            Err(e) => {
166                eprintln!("Error receiving message: {}", e);
167                break;
168            }
169        }
170    }
171
172    // 关闭服务器
173    // Close server
174    server.close().await?;
175    eprintln!("Server stopped");
176    Ok(())
177}

Trait Implementations§

Source§

impl Clone for Response

Source§

fn clone(&self) -> Response

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Response

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Response

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Response

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T