solidb_client/protocol/
command.rs

1use super::types::IsolationLevel;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(tag = "cmd", rename_all = "snake_case")]
7pub enum Command {
8    Auth {
9        database: String,
10        username: String,
11        password: String,
12    },
13    Ping,
14    ListDatabases,
15    CreateDatabase {
16        name: String,
17    },
18    DeleteDatabase {
19        name: String,
20    },
21    ListCollections {
22        database: String,
23    },
24    CreateCollection {
25        database: String,
26        name: String,
27        #[serde(rename = "type")]
28        collection_type: Option<String>,
29    },
30    DeleteCollection {
31        database: String,
32        name: String,
33    },
34    CollectionStats {
35        database: String,
36        name: String,
37    },
38    Get {
39        database: String,
40        collection: String,
41        key: String,
42    },
43    Insert {
44        database: String,
45        collection: String,
46        key: Option<String>,
47        document: Value,
48    },
49    Update {
50        database: String,
51        collection: String,
52        key: String,
53        document: Value,
54        #[serde(default)]
55        merge: bool,
56    },
57    Delete {
58        database: String,
59        collection: String,
60        key: String,
61    },
62    List {
63        database: String,
64        collection: String,
65        limit: Option<usize>,
66        offset: Option<usize>,
67    },
68    Query {
69        database: String,
70        sdbql: String,
71        bind_vars: Option<std::collections::HashMap<String, Value>>,
72    },
73    Explain {
74        database: String,
75        sdbql: String,
76        bind_vars: Option<std::collections::HashMap<String, Value>>,
77    },
78    CreateIndex {
79        database: String,
80        collection: String,
81        name: String,
82        fields: Vec<String>,
83        #[serde(default)]
84        unique: bool,
85        #[serde(default)]
86        sparse: bool,
87    },
88    DeleteIndex {
89        database: String,
90        collection: String,
91        name: String,
92    },
93    ListIndexes {
94        database: String,
95        collection: String,
96    },
97    BeginTransaction {
98        database: String,
99        #[serde(default)]
100        isolation_level: IsolationLevel,
101    },
102    CommitTransaction {
103        tx_id: String,
104    },
105    RollbackTransaction {
106        tx_id: String,
107    },
108    TransactionCommand {
109        tx_id: String,
110        command: Box<Command>,
111    },
112    Batch {
113        commands: Vec<Command>,
114    },
115    BulkInsert {
116        database: String,
117        collection: String,
118        documents: Vec<Value>,
119    },
120    CreateScript {
121        database: String,
122        name: String,
123        path: String,
124        #[serde(default)]
125        methods: Vec<String>,
126        code: String,
127        description: Option<String>,
128        collection: Option<String>,
129    },
130    ListScripts {
131        database: String,
132    },
133    GetScript {
134        database: String,
135        script_id: String,
136    },
137    UpdateScript {
138        database: String,
139        script_id: String,
140        name: Option<String>,
141        path: Option<String>,
142        methods: Option<Vec<String>>,
143        code: Option<String>,
144        description: Option<String>,
145    },
146    DeleteScript {
147        database: String,
148        script_id: String,
149    },
150    GetScriptStats,
151    ListQueues {
152        database: String,
153    },
154    ListJobs {
155        database: String,
156        queue_name: String,
157        status: Option<String>,
158        limit: Option<usize>,
159        offset: Option<usize>,
160    },
161    EnqueueJob {
162        database: String,
163        queue_name: String,
164        script_path: String,
165        params: Option<Value>,
166        priority: Option<i32>,
167        run_at: Option<i64>,
168        max_retries: Option<u32>,
169    },
170    CancelJob {
171        database: String,
172        job_id: String,
173    },
174    ListCronJobs {
175        database: String,
176    },
177    CreateCronJob {
178        database: String,
179        name: String,
180        cron_expression: String,
181        script_path: String,
182        params: Option<Value>,
183        queue: Option<String>,
184        priority: Option<i32>,
185        max_retries: Option<u32>,
186    },
187    UpdateCronJob {
188        database: String,
189        cron_id: String,
190        name: Option<String>,
191        cron_expression: Option<String>,
192        script_path: Option<String>,
193        params: Option<Value>,
194        queue: Option<String>,
195        priority: Option<i32>,
196        max_retries: Option<u32>,
197    },
198    DeleteCronJob {
199        database: String,
200        cron_id: String,
201    },
202    ListTriggers {
203        database: String,
204    },
205    ListCollectionTriggers {
206        database: String,
207        collection: String,
208    },
209    CreateTrigger {
210        database: String,
211        name: String,
212        collection: String,
213        events: Vec<String>,
214        script_path: String,
215        filter: Option<String>,
216        queue: Option<String>,
217        priority: Option<i32>,
218        max_retries: Option<u32>,
219        #[serde(default = "default_true")]
220        enabled: bool,
221    },
222    GetTrigger {
223        database: String,
224        trigger_id: String,
225    },
226    UpdateTrigger {
227        database: String,
228        trigger_id: String,
229        name: Option<String>,
230        events: Option<Vec<String>>,
231        script_path: Option<String>,
232        filter: Option<String>,
233        queue: Option<String>,
234        priority: Option<i32>,
235        max_retries: Option<u32>,
236        enabled: Option<bool>,
237    },
238    DeleteTrigger {
239        database: String,
240        trigger_id: String,
241    },
242    ToggleTrigger {
243        database: String,
244        trigger_id: String,
245    },
246    ListEnvVars {
247        database: String,
248    },
249    SetEnvVar {
250        database: String,
251        key: String,
252        value: String,
253    },
254    DeleteEnvVar {
255        database: String,
256        key: String,
257    },
258    ListRoles,
259    CreateRole {
260        name: String,
261        permissions: Vec<String>,
262    },
263    GetRole {
264        name: String,
265    },
266    UpdateRole {
267        name: String,
268        permissions: Vec<String>,
269    },
270    DeleteRole {
271        name: String,
272    },
273    ListUsers,
274    CreateUser {
275        username: String,
276        password: String,
277        #[serde(default)]
278        roles: Vec<String>,
279    },
280    DeleteUser {
281        username: String,
282    },
283    GetUserRoles {
284        username: String,
285    },
286    AssignRole {
287        username: String,
288        role: String,
289        database: Option<String>,
290    },
291    RevokeRole {
292        username: String,
293        role: String,
294    },
295    GetCurrentUserPermissions,
296    GetCurrentUser,
297    ListApiKeys,
298    CreateApiKey {
299        name: String,
300        #[serde(default)]
301        permissions: Vec<String>,
302        expires_at: Option<i64>,
303    },
304    DeleteApiKey {
305        key_id: String,
306    },
307    ClusterStatus,
308    ClusterInfo,
309    ClusterRemoveNode {
310        node_id: String,
311    },
312    ClusterRebalance,
313    ClusterCleanup,
314    ClusterReshard {
315        database: String,
316        shards: u32,
317    },
318    TruncateCollection {
319        database: String,
320        collection: String,
321    },
322    CompactCollection {
323        database: String,
324        collection: String,
325    },
326    PruneCollection {
327        database: String,
328        collection: String,
329    },
330    RecountCollection {
331        database: String,
332        collection: String,
333    },
334    RepairCollection {
335        database: String,
336        collection: String,
337    },
338    GetCollectionSharding {
339        database: String,
340        collection: String,
341    },
342    ExportCollection {
343        database: String,
344        collection: String,
345    },
346    ImportCollection {
347        database: String,
348        collection: String,
349        documents: Vec<Value>,
350    },
351    SetCollectionSchema {
352        database: String,
353        collection: String,
354        schema: Value,
355    },
356    GetCollectionSchema {
357        database: String,
358        collection: String,
359    },
360    DeleteCollectionSchema {
361        database: String,
362        collection: String,
363    },
364    RebuildIndexes {
365        database: String,
366        collection: String,
367    },
368    HybridSearch {
369        database: String,
370        collection: String,
371        query: String,
372        vector: Vec<f32>,
373        limit: Option<u32>,
374        filter: Option<String>,
375    },
376    CreateGeoIndex {
377        database: String,
378        collection: String,
379        name: String,
380        field: String,
381    },
382    ListGeoIndexes {
383        database: String,
384        collection: String,
385    },
386    DeleteGeoIndex {
387        database: String,
388        collection: String,
389        name: String,
390    },
391    GeoNear {
392        database: String,
393        collection: String,
394        field: String,
395        latitude: f64,
396        longitude: f64,
397        radius: Option<f64>,
398        limit: Option<i32>,
399    },
400    GeoWithin {
401        database: String,
402        collection: String,
403        field: String,
404        polygon: Vec<(f64, f64)>,
405    },
406    CreateVectorIndex {
407        database: String,
408        collection: String,
409        name: String,
410        field: String,
411        dimensions: i32,
412        metric: Option<String>,
413        ef_construction: Option<i32>,
414        m: Option<i32>,
415    },
416    ListVectorIndexes {
417        database: String,
418        collection: String,
419    },
420    DeleteVectorIndex {
421        database: String,
422        collection: String,
423        name: String,
424    },
425    VectorSearch {
426        database: String,
427        collection: String,
428        index_name: String,
429        vector: Vec<f32>,
430        limit: Option<i32>,
431        ef_search: Option<i32>,
432        filter: Option<String>,
433    },
434    QuantizeVectorIndex {
435        database: String,
436        collection: String,
437        index_name: String,
438    },
439    DequantizeVectorIndex {
440        database: String,
441        collection: String,
442        index_name: String,
443    },
444    CreateTtlIndex {
445        database: String,
446        collection: String,
447        name: String,
448        field: String,
449        expire_after_seconds: i64,
450    },
451    ListTtlIndexes {
452        database: String,
453        collection: String,
454    },
455    DeleteTtlIndex {
456        database: String,
457        collection: String,
458        name: String,
459    },
460    CreateColumnar {
461        database: String,
462        name: String,
463        columns: Vec<Value>,
464    },
465    ListColumnar {
466        database: String,
467    },
468    GetColumnar {
469        database: String,
470        collection: String,
471    },
472    DeleteColumnar {
473        database: String,
474        collection: String,
475    },
476    InsertColumnar {
477        database: String,
478        collection: String,
479        rows: Vec<Value>,
480    },
481    AggregateColumnar {
482        database: String,
483        collection: String,
484        aggregations: Vec<Value>,
485        group_by: Option<Vec<String>>,
486        filter: Option<String>,
487    },
488    QueryColumnar {
489        database: String,
490        collection: String,
491        columns: Option<Vec<String>>,
492        filter: Option<String>,
493        order_by: Option<String>,
494        limit: Option<i32>,
495    },
496    CreateColumnarIndex {
497        database: String,
498        collection: String,
499        column: String,
500    },
501    ListColumnarIndexes {
502        database: String,
503        collection: String,
504    },
505    DeleteColumnarIndex {
506        database: String,
507        collection: String,
508        column: String,
509    },
510}
511
512fn default_true() -> bool {
513    true
514}