Skip to main content

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