1use serde::{Deserialize, Serialize};
6use serde_json::value::RawValue;
7use serde_json::Value;
8
9fn default_true() -> bool {
10 true
11}
12
13pub const ENGINE_HANDSHAKE: &str = "engine.handshake";
14pub const QUERY_FIND_MANY: &str = "query.findMany";
15pub const QUERY_FIND_FIRST: &str = "query.findFirst";
16pub const QUERY_FIND_UNIQUE: &str = "query.findUnique";
17pub const QUERY_FIND_UNIQUE_OR_THROW: &str = "query.findUniqueOrThrow";
18pub const QUERY_FIND_FIRST_OR_THROW: &str = "query.findFirstOrThrow";
19pub const QUERY_CREATE: &str = "query.create";
20pub const QUERY_CREATE_MANY: &str = "query.createMany";
21pub const QUERY_UPDATE: &str = "query.update";
22pub const QUERY_DELETE: &str = "query.delete";
23pub const QUERY_COUNT: &str = "query.count";
24pub const QUERY_GROUP_BY: &str = "query.groupBy";
26pub const SCHEMA_VALIDATE: &str = "schema.validate";
28
29pub const TRANSACTION_START: &str = "transaction.start";
31pub const TRANSACTION_COMMIT: &str = "transaction.commit";
33pub const TRANSACTION_ROLLBACK: &str = "transaction.rollback";
35pub const TRANSACTION_BATCH: &str = "transaction.batch";
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(rename_all = "camelCase")]
44pub struct HandshakeParams {
45 pub protocol_version: u32,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub client_name: Option<String>,
51
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub client_version: Option<String>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59#[serde(rename_all = "camelCase")]
60pub struct HandshakeResult {
61 pub engine_version: String,
63
64 pub protocol_version: u32,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct FindManyParams {
72 pub protocol_version: u32,
74
75 pub model: String,
77
78 #[serde(skip_serializing_if = "Option::is_none")]
81 pub args: Option<Value>,
82
83 #[serde(skip_serializing_if = "Option::is_none")]
85 pub transaction_id: Option<String>,
86
87 #[serde(skip_serializing_if = "Option::is_none")]
90 pub chunk_size: Option<usize>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
95#[serde(rename_all = "camelCase")]
96pub struct FindFirstParams {
97 pub protocol_version: u32,
98 pub model: String,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub args: Option<Value>,
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub transaction_id: Option<String>,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize)]
108#[serde(rename_all = "camelCase")]
109pub struct FindUniqueParams {
110 pub protocol_version: u32,
111 pub model: String,
112 pub filter: Value,
113 #[serde(skip_serializing_if = "Option::is_none")]
115 pub transaction_id: Option<String>,
116}
117
118pub type FindUniqueOrThrowParams = FindUniqueParams;
120
121pub type FindFirstOrThrowParams = FindFirstParams;
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
126#[serde(rename_all = "camelCase")]
127pub struct CreateParams {
128 pub protocol_version: u32,
129 pub model: String,
130 pub data: Value,
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub transaction_id: Option<String>,
134 #[serde(default = "default_true")]
136 pub return_data: bool,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
141#[serde(rename_all = "camelCase")]
142pub struct CreateManyParams {
143 pub protocol_version: u32,
144 pub model: String,
145 pub data: Vec<Value>,
146 #[serde(skip_serializing_if = "Option::is_none")]
148 pub transaction_id: Option<String>,
149 #[serde(default = "default_true")]
151 pub return_data: bool,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
156#[serde(rename_all = "camelCase")]
157pub struct UpdateParams {
158 pub protocol_version: u32,
159 pub model: String,
160 pub filter: Value,
161 pub data: Value,
162 #[serde(skip_serializing_if = "Option::is_none")]
164 pub transaction_id: Option<String>,
165 #[serde(default = "default_true")]
167 pub return_data: bool,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
172#[serde(rename_all = "camelCase")]
173pub struct DeleteParams {
174 pub protocol_version: u32,
175 pub model: String,
176 pub filter: Value,
177 #[serde(skip_serializing_if = "Option::is_none")]
179 pub transaction_id: Option<String>,
180 #[serde(default = "default_true")]
182 pub return_data: bool,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize)]
187#[serde(rename_all = "camelCase")]
188pub struct CountParams {
189 pub protocol_version: u32,
190 pub model: String,
191 #[serde(skip_serializing_if = "Option::is_none")]
193 pub args: Option<Value>,
194 #[serde(skip_serializing_if = "Option::is_none")]
196 pub transaction_id: Option<String>,
197}
198
199#[derive(Debug, Clone, Serialize, Deserialize)]
201#[serde(rename_all = "camelCase")]
202pub struct GroupByParams {
203 pub protocol_version: u32,
204 pub model: String,
205 #[serde(skip_serializing_if = "Option::is_none")]
207 pub args: Option<Value>,
208 #[serde(skip_serializing_if = "Option::is_none")]
210 pub transaction_id: Option<String>,
211}
212
213#[derive(Debug, Clone, Serialize, Deserialize)]
215pub struct QueryResult {
216 pub data: Vec<Value>,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct MutationResult {
223 pub count: usize,
225
226 #[serde(skip_serializing_if = "Option::is_none")]
228 pub data: Option<Vec<Value>>,
229}
230
231pub const QUERY_RAW: &str = "query.rawQuery";
233pub const QUERY_RAW_STMT: &str = "query.rawStmtQuery";
235
236#[derive(Debug, Clone, Serialize, Deserialize)]
242#[serde(rename_all = "camelCase")]
243pub struct RawQueryParams {
244 pub protocol_version: u32,
246 pub sql: String,
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub transaction_id: Option<String>,
251}
252
253#[derive(Debug, Clone, Serialize, Deserialize)]
260#[serde(rename_all = "camelCase")]
261pub struct RawStmtQueryParams {
262 pub protocol_version: u32,
264 pub sql: String,
266 #[serde(default)]
268 pub params: Vec<Value>,
269 #[serde(skip_serializing_if = "Option::is_none")]
271 pub transaction_id: Option<String>,
272}
273
274#[derive(Debug, Clone, Serialize, Deserialize)]
276#[serde(rename_all = "camelCase")]
277pub struct SchemaValidateParams {
278 pub protocol_version: u32,
279 pub schema: String,
280}
281
282#[derive(Debug, Clone, Serialize, Deserialize)]
284pub struct SchemaValidateResult {
285 pub valid: bool,
287
288 #[serde(skip_serializing_if = "Option::is_none")]
290 pub errors: Option<Vec<String>>,
291}
292
293#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
295#[serde(rename_all = "camelCase")]
296pub enum IsolationLevel {
297 ReadUncommitted,
299 ReadCommitted,
301 RepeatableRead,
303 Serializable,
305}
306
307impl IsolationLevel {
308 pub fn as_sql(&self) -> &'static str {
310 match self {
311 IsolationLevel::ReadUncommitted => "READ UNCOMMITTED",
312 IsolationLevel::ReadCommitted => "READ COMMITTED",
313 IsolationLevel::RepeatableRead => "REPEATABLE READ",
314 IsolationLevel::Serializable => "SERIALIZABLE",
315 }
316 }
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize)]
321#[serde(rename_all = "camelCase")]
322pub struct TransactionStartParams {
323 pub protocol_version: u32,
324 #[serde(skip_serializing_if = "Option::is_none")]
327 pub timeout_ms: Option<u64>,
328 #[serde(skip_serializing_if = "Option::is_none")]
330 pub isolation_level: Option<IsolationLevel>,
331}
332
333#[derive(Debug, Clone, Serialize, Deserialize)]
335#[serde(rename_all = "camelCase")]
336pub struct TransactionStartResult {
337 pub id: String,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
344#[serde(rename_all = "camelCase")]
345pub struct TransactionCommitParams {
346 pub protocol_version: u32,
347 pub id: String,
349}
350
351#[derive(Debug, Clone, Serialize, Deserialize)]
353pub struct TransactionCommitResult {}
354
355#[derive(Debug, Clone, Serialize, Deserialize)]
357#[serde(rename_all = "camelCase")]
358pub struct TransactionRollbackParams {
359 pub protocol_version: u32,
360 pub id: String,
362}
363
364#[derive(Debug, Clone, Serialize, Deserialize)]
366pub struct TransactionRollbackResult {}
367
368#[derive(Debug, Clone, Serialize, Deserialize)]
370#[serde(rename_all = "camelCase")]
371pub struct BatchOperation {
372 pub method: String,
374 pub params: Value,
376}
377
378#[derive(Debug, Clone, Serialize, Deserialize)]
380#[serde(rename_all = "camelCase")]
381pub struct TransactionBatchParams {
382 pub protocol_version: u32,
383 pub operations: Vec<BatchOperation>,
385 #[serde(skip_serializing_if = "Option::is_none")]
387 pub isolation_level: Option<IsolationLevel>,
388 #[serde(skip_serializing_if = "Option::is_none")]
390 pub timeout_ms: Option<u64>,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
395pub struct TransactionBatchResult {
396 pub results: Vec<Box<RawValue>>,
398}