command_autocomplete/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Deserialize, Serialize)]
4#[serde(untagged)]
5pub enum Message {
6    Request(Request),
7    Response(Response),
8}
9
10impl From<Response> for Message {
11    fn from(value: Response) -> Self {
12        Message::Response(value)
13    }
14}
15
16impl From<Request> for Message {
17    fn from(value: Request) -> Self {
18        Message::Request(value)
19    }
20}
21
22#[derive(Clone, Debug, Deserialize, Serialize)]
23#[serde(deny_unknown_fields)]
24pub struct Request {
25    pub id: RequestId,
26    pub method: String,
27    pub params: serde_json::Value,
28}
29
30#[derive(Debug, Clone, Deserialize, Serialize, Eq, PartialEq, Hash)]
31pub struct RequestId(pub String);
32
33impl Request {
34    pub fn new(id: RequestId, method: impl Into<String>, params: impl Serialize) -> Self {
35        Request {
36            id,
37            method: method.into(),
38            params: serde_json::to_value(params).unwrap(),
39        }
40    }
41}
42
43#[derive(Clone, Debug, Deserialize, Serialize)]
44#[serde(untagged, deny_unknown_fields)]
45pub enum Response {
46    Ok {
47        id: RequestId,
48        result: serde_json::Value,
49    },
50    Err {
51        id: RequestId,
52        error: Error,
53    },
54}
55
56impl Response {
57    pub fn id(&self) -> &RequestId {
58        match self {
59            Response::Ok { id, result: _ } => id,
60            Response::Err { id, error: _ } => id,
61        }
62    }
63}
64
65#[derive(Clone, Debug, Deserialize, Serialize)]
66pub struct Error {
67    pub code: String,
68    pub message: String,
69}
70
71impl Error {
72    pub fn invalid_request(message: impl Into<String>) -> Self {
73        Error {
74            code: "INVALID_REQUEST".into(),
75            message: message.into(),
76        }
77    }
78
79    pub fn internal(message: impl Into<String>) -> Self {
80        Error {
81            code: "INTERNAL".into(),
82            message: message.into(),
83        }
84    }
85}
86
87impl Response {
88    pub fn new_ok<R: Serialize>(id: RequestId, result: R) -> Self {
89        Response::Ok {
90            id,
91            result: serde_json::to_value(result).unwrap(),
92        }
93    }
94    pub fn new_err(id: RequestId, error: Error) -> Self {
95        Response::Err { id, error }
96    }
97}
98
99#[derive(Debug, Deserialize, Serialize)]
100pub struct CompleteParams {
101    pub args: Vec<String>,
102}
103
104#[derive(Debug, Deserialize, Serialize)]
105pub struct CompleteResult {
106    pub values: Vec<CompletionValue>,
107}
108
109#[derive(Debug, Deserialize, Serialize)]
110pub struct CompletionValue {
111    pub value: String,
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub description: Option<String>,
114}
115
116#[derive(Debug, Deserialize, Serialize)]
117pub struct ShutdownResult {}