mcp_kit/server/
extract.rs1use crate::error::{McpError, McpResult};
3use serde::de::DeserializeOwned;
4
5pub struct Json<T>(pub T);
9
10impl<T: DeserializeOwned> Json<T> {
11 pub fn from_value(v: serde_json::Value) -> McpResult<Self> {
12 serde_json::from_value(v)
13 .map(Json)
14 .map_err(|e| McpError::InvalidParams(e.to_string()))
15 }
16}
17
18impl<T> std::ops::Deref for Json<T> {
19 type Target = T;
20 fn deref(&self) -> &Self::Target {
21 &self.0
22 }
23}
24
25#[derive(Clone)]
29pub struct State<S>(pub S);
30
31impl<S> std::ops::Deref for State<S> {
32 type Target = S;
33 fn deref(&self) -> &Self::Target {
34 &self.0
35 }
36}
37
38#[derive(Clone)]
42pub struct Extension<T>(pub T);
43
44impl<T> std::ops::Deref for Extension<T> {
45 type Target = T;
46 fn deref(&self) -> &Self::Target {
47 &self.0
48 }
49}