mochow_sdk_rust/mochow/api/
enums.rs

1/*
2 * Copyright 2024 Baidu, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 * either express or implied. See the License for the specific language governing permissions
12 * and limitations under the License.
13 */
14
15use serde::{Deserialize, Serialize};
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub enum AutoBuildPolicyType {
19    #[serde(rename = "TIMING", alias = "timing")]
20    TIMING,
21    #[serde(rename = "PERIODICAL", alias = "periodical")]
22    PERIODICAL,
23    #[serde(rename = "ROW_COUNT_INCREMENT", alias = "row_count_increment")]
24    ROW_COUNT_INCREMENT,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub enum FieldType {
29    #[serde(rename = "BOOL")]
30    BOOL,
31    #[serde(rename = "INT8")]
32    INT8,
33    #[serde(rename = "UINT8")]
34    UINT8,
35    #[serde(rename = "INT16")]
36    Int16,
37    #[serde(rename = "UINT16")]
38    Uint16,
39    #[serde(rename = "INT32")]
40    INT32,
41    #[serde(rename = "UINT32")]
42    UINT32,
43    #[serde(rename = "INT64")]
44    INT64,
45    #[serde(rename = "UINT64")]
46    UINT64,
47    #[serde(rename = "FLOAT")]
48    FLOAT,
49    #[serde(rename = "DOUBLE")]
50    DOUBLE,
51    #[serde(rename = "DATE")]
52    DATE,
53    #[serde(rename = "DATETIME")]
54    DATETIME,
55    #[serde(rename = "TIMESTAMP")]
56    TIMESTAMP,
57    #[serde(rename = "STRING")]
58    STRING,
59    #[serde(rename = "BINARY")]
60    BINARY,
61    #[serde(rename = "UUID")]
62    UUID,
63    #[serde(rename = "TEXT")]
64    TEXT,
65    #[serde(rename = "TEXT_GBK")]
66    TEXT_GBK,
67    #[serde(rename = "TEXT_GB18030")]
68    TEXT_GB18030,
69    #[serde(rename = "FLOAT_VECTOR")]
70    FLOAT_VECTOR,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub enum IndexState {
75    #[serde(rename = "INVALID")]
76    INVALID,
77    #[serde(rename = "BUILDING")]
78    BUILDING,
79    #[serde(rename = "NORMAL")]
80    NORMAL,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub enum TableState {
85    #[serde(rename = "INVALID")]
86    INVALID,
87    #[serde(rename = "CREATING")]
88    CREATING,
89    #[serde(rename = "NORMAL")]
90    NORMAL,
91    #[serde(rename = "DELETING")]
92    DELETING,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
96pub enum IndexType {
97    #[serde(rename = "FLAT")]
98    FLAT,
99    #[serde(rename = "HNSW")]
100    HNSW,
101    #[serde(rename = "HNSWPQ")]
102    HNSWPQ,
103    #[serde(rename = "PUCK")]
104    PUCK,
105    #[serde(rename = "SECONDARY")]
106    SECONDARY_INDEX,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize)]
110pub enum MetricType {
111    #[serde(rename = "L2")]
112    L2,
113    #[serde(rename = "IP")]
114    IP,
115    #[serde(rename = "COSINE")]
116    COSINE,
117}
118
119#[derive(Debug, Clone, Default, Serialize, Deserialize)]
120pub enum PartitionType {
121    #[default]
122    #[serde(rename = "HASH")]
123    HASH,
124}
125
126#[derive(Debug, Clone, Default, Serialize, Deserialize)]
127pub enum ReadConsistency {
128    #[default]
129    #[serde(rename = "EVENTUAL")]
130    EVENTUAL,
131    #[serde(rename = "STRONG")]
132    STRONG,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
136pub enum ServerErrorCode {
137    UNKNOWN,
138    INTERNAL_ERROR = 1,
139    INVALID_PARAMETER = 2,
140    INVALID_HTTP_URL = 10,
141    INVALID_HTTP_HEADER = 11,
142    INVALID_HTTP_BODY = 12,
143    MISS_SSL_CERTIFICATES = 13,
144
145    USER_NOT_EXIST = 20,
146    USER_ALREADY_EXIST = 21,
147    ROLE_NOT_EXIST = 22,
148    ROLE_ALREADY_EXIST = 23,
149    AUTHENTICATION_FAILED = 24,
150    PERMISSION_DENIED = 25,
151
152    DB_NOT_EXIST = 50,
153    DB_ALREADY_EXIST = 51,
154    DB_TOO_MANY_TABLES = 52,
155    DB_NOT_EMPTY = 53,
156
157    INVALID_TABLE_SCHEMA = 60,
158    INVALID_PARTITION_PARAMETERS = 61,
159    TABLE_TOO_MANY_FIELDS = 62,
160    TABLE_TOO_MANY_FAMILIES = 63,
161    TABLE_TOO_MANY_PRIMARY_KEYS = 64,
162    TABLE_TOO_MANY_PARTITION_KEYS = 65,
163    TABLE_TOO_MANY_VECTOR_FIELDS = 66,
164    TABLE_TOO_MANY_INDEXES = 67,
165    DYNAMIC_SCHEMA_ERROR = 68,
166    TABLE_NOT_EXIST = 69,
167    TABLE_ALREADY_EXIST = 70,
168    INVALID_TABLE_STATE = 71,
169    TABLE_NOT_READY = 72,
170    ALIAS_NOT_EXIST = 73,
171    ALIAS_ALREADY_EXIST = 74,
172
173    FIELD_NOT_EXIST = 80,
174    FIELD_ALREADY_EXIST = 81,
175    VECTOR_FIELD_NOT_EXIST = 82,
176
177    INVALID_INDEX_SCHEMA = 90,
178    INDEX_NOT_EXIST = 91,
179    INDEX_ALREADY_EXIST = 92,
180    INDEX_DUPLICATED = 93,
181    INVALID_INDEX_STATE = 94,
182
183    PRIMARY_KEY_DUPLICATED = 100,
184    ROW_KEY_NOT_FOUND = 101,
185}
186
187impl From<i32> for ServerErrorCode {
188    fn from(value: i32) -> Self {
189        match value {
190            1 => ServerErrorCode::INTERNAL_ERROR,
191            2 => ServerErrorCode::INVALID_PARAMETER,
192            10 => ServerErrorCode::INVALID_HTTP_URL,
193            11 => ServerErrorCode::INVALID_HTTP_HEADER,
194            12 => ServerErrorCode::INVALID_HTTP_BODY,
195            13 => ServerErrorCode::MISS_SSL_CERTIFICATES,
196            20 => ServerErrorCode::USER_NOT_EXIST,
197            21 => ServerErrorCode::USER_ALREADY_EXIST,
198            22 => ServerErrorCode::ROLE_NOT_EXIST,
199            23 => ServerErrorCode::ROLE_ALREADY_EXIST,
200            24 => ServerErrorCode::AUTHENTICATION_FAILED,
201            25 => ServerErrorCode::PERMISSION_DENIED,
202            50 => ServerErrorCode::DB_NOT_EXIST,
203            51 => ServerErrorCode::DB_ALREADY_EXIST,
204            52 => ServerErrorCode::DB_TOO_MANY_TABLES,
205            53 => ServerErrorCode::DB_NOT_EMPTY,
206            60 => ServerErrorCode::INVALID_TABLE_SCHEMA,
207            61 => ServerErrorCode::INVALID_PARTITION_PARAMETERS,
208            62 => ServerErrorCode::TABLE_TOO_MANY_FIELDS,
209            63 => ServerErrorCode::TABLE_TOO_MANY_FAMILIES,
210            64 => ServerErrorCode::TABLE_TOO_MANY_PRIMARY_KEYS,
211            65 => ServerErrorCode::TABLE_TOO_MANY_PARTITION_KEYS,
212            66 => ServerErrorCode::TABLE_TOO_MANY_VECTOR_FIELDS,
213            67 => ServerErrorCode::TABLE_TOO_MANY_INDEXES,
214            68 => ServerErrorCode::DYNAMIC_SCHEMA_ERROR,
215            69 => ServerErrorCode::TABLE_NOT_EXIST,
216            70 => ServerErrorCode::TABLE_ALREADY_EXIST,
217            71 => ServerErrorCode::INVALID_TABLE_STATE,
218            72 => ServerErrorCode::TABLE_NOT_READY,
219            73 => ServerErrorCode::ALIAS_NOT_EXIST,
220            74 => ServerErrorCode::ALIAS_ALREADY_EXIST,
221            80 => ServerErrorCode::FIELD_NOT_EXIST,
222            81 => ServerErrorCode::FIELD_ALREADY_EXIST,
223            82 => ServerErrorCode::VECTOR_FIELD_NOT_EXIST,
224            90 => ServerErrorCode::INVALID_INDEX_SCHEMA,
225            91 => ServerErrorCode::INDEX_NOT_EXIST,
226            92 => ServerErrorCode::INDEX_ALREADY_EXIST,
227            93 => ServerErrorCode::INDEX_DUPLICATED,
228            94 => ServerErrorCode::INVALID_INDEX_STATE,
229            100 => ServerErrorCode::PRIMARY_KEY_DUPLICATED,
230            101 => ServerErrorCode::ROW_KEY_NOT_FOUND,
231            _ => ServerErrorCode::UNKNOWN,
232        }
233    }
234}
235
236#[cfg(test)]
237mod tests {
238
239    #[test]
240    fn test_serialize() {
241        let p = super::AutoBuildPolicyType::TIMING;
242
243        let s = serde_json::to_string(&p).unwrap();
244
245        assert_eq!(s, "\"TIMING\"");
246    }
247}