tea_codec/
keyvalue.rs

1//! # Key-Value Store Data Types
2//!
3//! This module contains data types for the `tea:keyvalue` capability provider
4
5pub const OP_ADD: &str = "Add";
6pub const OP_GET: &str = "Get";
7pub const OP_SET: &str = "Set";
8pub const OP_DEL: &str = "Del";
9pub const OP_CLEAR: &str = "Clear";
10pub const OP_RANGE: &str = "Range";
11pub const OP_PUSH: &str = "Push";
12pub const OP_LIST_DEL: &str = "ListItemDelete";
13pub const OP_KEYVEC_INSERT: &str = "KeyVecInsert";
14pub const OP_KEYVEC_TAILOFF: &str = "KeyVecTailOff";
15pub const OP_KEYVEC_GET: &str = "KeyVecGet";
16pub const OP_SET_ADD: &str = "SetAdd";
17pub const OP_SET_REMOVE: &str = "SetRemove";
18pub const OP_SET_UNION: &str = "SetUnion";
19pub const OP_SET_INTERSECT: &str = "SetIntersection";
20pub const OP_SET_QUERY: &str = "SetQuery";
21pub const OP_KEY_EXISTS: &str = "KeyExists";
22
23/// A request to get a single value from the K/V store
24#[derive(Debug, PartialEq, Deserialize, Serialize)]
25#[serde(rename_all = "camelCase")]
26pub struct GetRequest {
27    pub key: String,
28}
29
30/// The result of a get request
31#[derive(Debug, PartialEq, Deserialize, Serialize)]
32#[serde(rename_all = "camelCase")]
33pub struct GetResponse {
34    /// The value returned from the data store
35    pub value: Vec<u8>,
36    /// Indicates whether the key existed
37    pub exists: bool,
38}
39
40/// A request to set a value
41#[derive(Debug, PartialEq, Deserialize, Serialize)]
42#[serde(rename_all = "camelCase")]
43pub struct SetRequest{
44    /// Key of the item to set
45    pub key: String,
46    /// Value of the item to set
47    pub value: Vec<u8>,
48    /// Seconds after which the key will expire, 0 - no expiration
49    #[serde(rename = "expires")]
50    pub expires_s: i32,
51}
52
53/// A request to delete a key
54#[derive(Debug, PartialEq, Deserialize, Serialize)]
55#[serde(rename_all = "camelCase")]
56pub struct DelRequest {
57    pub key: String,
58}
59
60#[derive(Debug, PartialEq, Deserialize, Serialize)]
61#[serde(rename_all = "camelCase")]
62pub struct DelResponse {
63    pub key: String,
64}
65
66/// Response to a set request
67#[derive(Debug, PartialEq, Deserialize, Serialize)]
68#[serde(rename_all = "camelCase")]
69pub struct SetResponse {
70    pub value: Vec<u8>,
71}
72
73/// A request to perform an atomic add operation
74#[derive(Debug, PartialEq, Deserialize, Serialize)]
75#[serde(rename_all = "camelCase")]
76pub struct AddRequest {
77    pub key: String,
78    pub value: i32,
79}
80
81/// Result of an atomic add operation
82#[derive(Debug, PartialEq, Deserialize, Serialize)]
83#[serde(rename_all = "camelCase")]
84pub struct AddResponse {
85    pub value: i32,
86}
87
88/// A request to add an item to the end of a list
89#[derive(Debug, PartialEq, Deserialize, Serialize)]
90#[serde(rename_all = "camelCase")]
91pub struct ListPushRequest {
92    pub key: String,
93    pub value: Vec<u8>,
94}
95
96/// A request to delete all occurences of an item from a list
97#[derive(Debug, PartialEq, Deserialize, Serialize)]
98#[serde(rename_all = "camelCase")]
99pub struct ListDelItemRequest {
100    pub key: String,
101    pub value: Vec<u8>,
102}
103
104/// A request to clear a list at a given key
105#[derive(Debug, PartialEq, Deserialize, Serialize)]
106#[serde(rename_all = "camelCase")]
107pub struct ListClearRequest {
108    pub key: String,
109}
110
111/// A request to retrieve a range of values from a list
112#[derive(Debug, PartialEq, Deserialize, Serialize)]
113#[serde(rename_all = "camelCase")]
114pub struct ListRangeRequest {
115    pub key: String,
116    pub start: i32,
117    pub stop: i32,
118}
119
120/// List of values returned from a range request
121#[derive(Debug, PartialEq, Deserialize, Serialize)]
122#[serde(rename_all = "camelCase")]
123pub struct ListRangeResponse {
124    #[serde(default)]
125    pub values: Vec<Vec<u8>>,
126}
127
128/// Return response from non-range list requests like push and clear
129#[derive(Debug, PartialEq, Deserialize, Serialize)]
130#[serde(rename_all = "camelCase")]
131pub struct ListResponse {
132    pub new_count: i32,
133}
134
135/// Request to add an item to a set
136#[derive(Debug, PartialEq, Deserialize, Serialize)]
137#[serde(rename_all = "camelCase")]
138pub struct SetAddRequest {
139    pub key: String,
140    pub value: Vec<u8>,
141}
142
143/// Request to remove a specific value from a set
144#[derive(Debug, PartialEq, Deserialize, Serialize)]
145#[serde(rename_all = "camelCase")]
146pub struct SetRemoveRequest {
147    pub key: String,
148    pub value: Vec<u8>,
149}
150
151/// Request to query the contents of a set
152#[derive(Debug, PartialEq, Deserialize, Serialize)]
153#[serde(rename_all = "camelCase")]
154pub struct SetQueryRequest {
155    pub key: String,
156}
157
158/// Response to an operation that requests members of a list (query, intersect, union)
159#[derive(Debug, PartialEq, Deserialize, Serialize)]
160#[serde(rename_all = "camelCase")]
161pub struct SetQueryResponse {
162    #[serde(default)]
163    pub values: Vec<Vec<u8>>,
164}
165
166/// Request for the intersection of multiple sets
167#[derive(Debug, PartialEq, Deserialize, Serialize)]
168#[serde(rename_all = "camelCase")]
169pub struct SetIntersectionRequest {
170    #[serde(default)]
171    pub keys: Vec<String>,
172}
173
174/// Request for the union of multiple sets
175#[derive(Debug, PartialEq, Deserialize, Serialize)]
176#[serde(rename_all = "camelCase")]
177pub struct SetUnionRequest {
178    #[serde(default)]
179    pub keys: Vec<String>,
180}
181
182/// Response to a set query, add, or delete
183#[derive(Debug, PartialEq, Deserialize, Serialize)]
184#[serde(rename_all = "camelCase")]
185pub struct SetOperationResponse {
186    pub new_count: i32,
187}
188
189/// Test for the existence of a key
190#[derive(Debug, PartialEq, Deserialize, Serialize)]
191#[serde(rename_all = "camelCase")]
192pub struct KeyExistsQuery {
193    pub key: String,
194}
195
196/// Insert a Tuple into Sorted Vec. using sorted key
197/// 
198#[derive(Debug, PartialEq, Deserialize, Serialize)]
199#[serde(rename_all = "camelCase")]
200pub struct KeyVecInsertQuery {
201    pub key: String,
202    pub value:(i32, Vec<u8>),
203    pub overwrite: bool,
204}
205/// Response to a set query, add, or delete
206#[derive(Debug, PartialEq, Deserialize, Serialize)]
207#[serde(rename_all = "camelCase")]
208pub struct KeyVecInsertResponse {
209    pub success: bool,
210}
211/// Cut the Softed Vec to remain size. Drop off the tail if the vec is longer than remaining length
212/// 
213#[derive(Debug, PartialEq, Deserialize, Serialize)]
214#[serde(rename_all = "camelCase")]
215pub struct KeyVecTailOffQuery {
216    pub key: String,
217    pub remain: usize,
218}
219/// Response to a set query, add, or delete
220#[derive(Debug, PartialEq, Deserialize, Serialize)]
221#[serde(rename_all = "camelCase")]
222pub struct KeyVecTailOffResponse {
223    pub len: usize,
224}
225/// Query KeyVec to get return Vec from Sorted Vec
226#[derive(Debug, PartialEq, Deserialize, Serialize)]
227#[serde(rename_all = "camelCase")]
228pub struct KeyVecGetQuery {
229    pub key: String,
230}
231/// Response of KeyVecGetQuery
232#[derive(Debug, PartialEq, Deserialize, Serialize)]
233#[serde(rename_all = "camelCase")]
234pub struct KeyVecGetResponse {
235    #[serde(default)]
236    pub values: Vec<(i32, Vec<u8>)>,
237}