command_autocomplete/
types.rs1use 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 {}