1use rmcp::schemars;
6use rmcp::schemars::JsonSchema;
7use serde::{Deserialize, Serialize};
8use serde_json::Value;
9
10use crate::pagination::Cursor;
11
12#[derive(Debug, Serialize, JsonSchema)]
14#[serde(rename_all = "camelCase")]
15pub struct MessageResponse {
16 pub message: String,
18}
19
20#[derive(Debug, Default, Deserialize, JsonSchema)]
22#[serde(rename_all = "camelCase")]
23pub struct ListDatabasesRequest {
24 #[serde(default)]
26 pub cursor: Option<Cursor>,
27}
28
29#[derive(Debug, Serialize, JsonSchema)]
31#[serde(rename_all = "camelCase")]
32pub struct ListDatabasesResponse {
33 pub databases: Vec<String>,
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub next_cursor: Option<Cursor>,
38}
39
40#[derive(Debug, Default, Deserialize, JsonSchema)]
42#[serde(rename_all = "camelCase")]
43pub struct CreateDatabaseRequest {
44 pub database: String,
46}
47
48#[derive(Debug, Default, Deserialize, JsonSchema)]
50#[serde(rename_all = "camelCase")]
51pub struct DropDatabaseRequest {
52 pub database: String,
54}
55
56#[derive(Debug, Default, Deserialize, JsonSchema)]
58#[serde(rename_all = "camelCase")]
59pub struct ListTablesRequest {
60 #[serde(default)]
62 pub database: Option<String>,
63 #[serde(default)]
65 pub cursor: Option<Cursor>,
66}
67
68#[derive(Debug, Serialize, JsonSchema)]
70#[serde(rename_all = "camelCase")]
71pub struct ListTablesResponse {
72 pub tables: Vec<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub next_cursor: Option<Cursor>,
77}
78
79#[derive(Debug, Default, Deserialize, JsonSchema)]
81#[serde(rename_all = "camelCase")]
82pub struct ListViewsRequest {
83 #[serde(default)]
85 pub database: Option<String>,
86 #[serde(default)]
88 pub cursor: Option<Cursor>,
89}
90
91#[derive(Debug, Serialize, JsonSchema)]
93#[serde(rename_all = "camelCase")]
94pub struct ListViewsResponse {
95 pub views: Vec<String>,
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub next_cursor: Option<Cursor>,
100}
101
102#[derive(Debug, Default, Deserialize, JsonSchema)]
104#[serde(rename_all = "camelCase")]
105pub struct ListTriggersRequest {
106 #[serde(default)]
108 pub database: Option<String>,
109 #[serde(default)]
111 pub cursor: Option<Cursor>,
112}
113
114#[derive(Debug, Serialize, JsonSchema)]
116#[serde(rename_all = "camelCase")]
117pub struct ListTriggersResponse {
118 pub triggers: Vec<String>,
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub next_cursor: Option<Cursor>,
123}
124
125#[derive(Debug, Default, Deserialize, JsonSchema)]
127#[serde(rename_all = "camelCase")]
128pub struct ListFunctionsRequest {
129 #[serde(default)]
131 pub database: Option<String>,
132 #[serde(default)]
134 pub cursor: Option<Cursor>,
135}
136
137#[derive(Debug, Serialize, JsonSchema)]
139#[serde(rename_all = "camelCase")]
140pub struct ListFunctionsResponse {
141 pub functions: Vec<String>,
143 #[serde(skip_serializing_if = "Option::is_none")]
145 pub next_cursor: Option<Cursor>,
146}
147
148#[derive(Debug, Default, Deserialize, JsonSchema)]
150#[serde(rename_all = "camelCase")]
151pub struct ListProceduresRequest {
152 #[serde(default)]
154 pub database: Option<String>,
155 #[serde(default)]
157 pub cursor: Option<Cursor>,
158}
159
160#[derive(Debug, Serialize, JsonSchema)]
162#[serde(rename_all = "camelCase")]
163pub struct ListProceduresResponse {
164 pub procedures: Vec<String>,
166 #[serde(skip_serializing_if = "Option::is_none")]
168 pub next_cursor: Option<Cursor>,
169}
170
171#[derive(Debug, Default, Deserialize, JsonSchema)]
173#[serde(rename_all = "camelCase")]
174pub struct ListMaterializedViewsRequest {
175 #[serde(default)]
177 pub database: Option<String>,
178 #[serde(default)]
180 pub cursor: Option<Cursor>,
181}
182
183#[derive(Debug, Serialize, JsonSchema)]
185#[serde(rename_all = "camelCase")]
186pub struct ListMaterializedViewsResponse {
187 pub materialized_views: Vec<String>,
189 #[serde(skip_serializing_if = "Option::is_none")]
191 pub next_cursor: Option<Cursor>,
192}
193
194#[derive(Debug, Default, Deserialize, JsonSchema)]
196#[serde(rename_all = "camelCase")]
197pub struct GetTableSchemaRequest {
198 #[serde(default)]
200 pub database: Option<String>,
201 pub table: String,
203}
204
205#[derive(Debug, Serialize, JsonSchema)]
207#[serde(rename_all = "camelCase")]
208pub struct TableSchemaResponse {
209 pub table: String,
211 pub columns: Value,
213}
214
215#[derive(Debug, Default, Deserialize, JsonSchema)]
217#[serde(rename_all = "camelCase")]
218pub struct QueryRequest {
219 pub query: String,
221 #[serde(default)]
223 pub database: Option<String>,
224}
225
226#[derive(Debug, Default, Deserialize, JsonSchema)]
228#[serde(rename_all = "camelCase")]
229pub struct ReadQueryRequest {
230 pub query: String,
232 #[serde(default)]
234 pub database: Option<String>,
235 #[serde(default)]
237 pub cursor: Option<Cursor>,
238}
239
240#[derive(Debug, Serialize, JsonSchema)]
242#[serde(rename_all = "camelCase")]
243pub struct QueryResponse {
244 pub rows: Vec<Value>,
246}
247
248#[derive(Debug, Serialize, JsonSchema)]
250#[serde(rename_all = "camelCase")]
251pub struct ReadQueryResponse {
252 pub rows: Vec<Value>,
254 #[serde(skip_serializing_if = "Option::is_none")]
258 pub next_cursor: Option<Cursor>,
259}
260
261#[derive(Debug, Default, Deserialize, JsonSchema)]
263#[serde(rename_all = "camelCase")]
264pub struct ExplainQueryRequest {
265 #[serde(default)]
267 pub database: Option<String>,
268 pub query: String,
270 #[serde(default)]
272 pub analyze: bool,
273}