1use serde::{Deserialize, Serialize};
2use serde_with::skip_serializing_none;
3use std::collections::HashMap;
4
5#[skip_serializing_none]
8#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
9pub struct LexBoolean {
10 pub description: Option<String>,
11 pub default: Option<bool>,
12 pub r#const: Option<bool>,
13}
14
15#[skip_serializing_none]
22#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
23pub struct LexInteger {
24 pub description: Option<String>,
25 pub default: Option<i64>,
26 pub minimum: Option<i64>,
27 pub maximum: Option<i64>,
28 pub r#enum: Option<Vec<i64>>,
29 pub r#const: Option<i64>,
30}
31
32#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy)]
33#[serde(rename_all = "kebab-case")]
34pub enum LexStringFormat {
35 Datetime,
36 Uri,
37 AtUri,
38 Did,
39 Handle,
40 AtIdentifier,
41 Nsid,
42 Cid,
43 Language,
44 Tid,
45 RecordKey,
46}
47#[skip_serializing_none]
48#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
49#[serde(rename_all = "camelCase")]
50pub struct LexString {
51 pub description: Option<String>,
52 pub format: Option<LexStringFormat>,
53 pub default: Option<String>,
54 pub min_length: Option<usize>,
55 pub max_length: Option<usize>,
56 pub min_graphemes: Option<usize>,
57 pub max_graphemes: Option<usize>,
58 pub r#enum: Option<Vec<String>>,
59 pub r#const: Option<String>,
60 pub known_values: Option<Vec<String>>,
61}
62
63#[skip_serializing_none]
64#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
65pub struct LexUnknown {
66 pub description: Option<String>,
67}
68
69#[skip_serializing_none]
72#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
73#[serde(rename_all = "camelCase")]
74pub struct LexBytes {
75 pub description: Option<String>,
76 pub max_length: Option<usize>,
77 pub min_length: Option<usize>,
78}
79
80#[skip_serializing_none]
81#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
82pub struct LexCidLink {
83 pub description: Option<String>,
84}
85
86#[skip_serializing_none]
89#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
90pub struct LexRef {
91 pub description: Option<String>,
92 pub r#ref: String,
93}
94
95#[skip_serializing_none]
96#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
97pub struct LexRefUnion {
98 pub description: Option<String>,
99 pub refs: Vec<String>,
100 pub closed: Option<bool>,
101}
102
103#[skip_serializing_none]
106#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
107#[serde(rename_all = "camelCase")]
108pub struct LexBlob {
109 pub description: Option<String>,
110 pub accept: Option<Vec<String>>,
111 pub max_size: Option<usize>,
112}
113
114#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
117#[serde(tag = "type", rename_all = "kebab-case")]
118pub enum LexArrayItem {
119 Boolean(LexBoolean),
121 Integer(LexInteger),
122 String(LexString),
123 Unknown(LexUnknown),
124 Bytes(LexBytes),
126 CidLink(LexCidLink),
127 Blob(LexBlob),
129 Ref(LexRef),
131 Union(LexRefUnion),
132}
133#[skip_serializing_none]
134#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
135#[serde(rename_all = "camelCase")]
136pub struct LexArray {
137 pub description: Option<String>,
138 pub items: LexArrayItem,
139 pub min_length: Option<usize>,
140 pub max_length: Option<usize>,
141}
142
143#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
144#[serde(tag = "type", rename_all = "lowercase")]
145pub enum LexPrimitiveArrayItem {
146 Boolean(LexBoolean),
148 Integer(LexInteger),
149 String(LexString),
150 Unknown(LexUnknown),
151}
152#[skip_serializing_none]
153#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
154#[serde(rename_all = "camelCase")]
155pub struct LexPrimitiveArray {
156 pub description: Option<String>,
157 pub items: LexPrimitiveArrayItem,
158 pub min_length: Option<usize>,
159 pub max_length: Option<usize>,
160}
161
162#[skip_serializing_none]
163#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
164pub struct LexToken {
165 pub description: Option<String>,
166}
167
168#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
169#[serde(tag = "type", rename_all = "kebab-case")]
170pub enum LexObjectProperty {
171 Ref(LexRef),
173 Union(LexRefUnion),
174 Bytes(LexBytes),
176 CidLink(LexCidLink),
177 Array(LexArray),
179 Blob(LexBlob),
181 Boolean(LexBoolean),
183 Integer(LexInteger),
184 String(LexString),
185 Unknown(LexUnknown),
186}
187#[skip_serializing_none]
188#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
189pub struct LexObject {
190 pub description: Option<String>,
191 pub required: Option<Vec<String>>,
192 pub nullable: Option<Vec<String>>,
193 pub properties: HashMap<String, LexObjectProperty>,
194}
195
196#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
199#[serde(tag = "type", rename_all = "lowercase")]
200pub enum LexXrpcParametersProperty {
201 Boolean(LexBoolean),
203 Integer(LexInteger),
204 String(LexString),
205 Unknown(LexUnknown),
206 Array(LexPrimitiveArray),
208}
209#[skip_serializing_none]
210#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
211pub struct LexXrpcParameters {
212 pub description: Option<String>,
213 pub required: Option<Vec<String>>,
214 pub properties: HashMap<String, LexXrpcParametersProperty>,
215}
216
217#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
218#[serde(tag = "type", rename_all = "lowercase")]
219pub enum LexXrpcBodySchema {
220 Ref(LexRef),
222 Union(LexRefUnion),
223 Object(LexObject),
225}
226#[skip_serializing_none]
227#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
228pub struct LexXrpcBody {
229 pub description: Option<String>,
230 pub encoding: String,
231 pub schema: Option<LexXrpcBodySchema>,
232}
233
234#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
235#[serde(tag = "type", rename_all = "lowercase")]
236pub enum LexXrpcSubscriptionMessageSchema {
237 Ref(LexRef),
239 Union(LexRefUnion),
240 Object(LexObject),
242}
243#[skip_serializing_none]
244#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
245pub struct LexXrpcSubscriptionMessage {
246 pub description: Option<String>,
247 pub schema: Option<LexXrpcSubscriptionMessageSchema>,
248}
249
250#[skip_serializing_none]
251#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
252pub struct LexXrpcError {
253 pub description: Option<String>,
254 pub name: String,
255}
256
257#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
258#[serde(tag = "type", rename_all = "lowercase")]
259pub enum LexXrpcQueryParameter {
260 Params(LexXrpcParameters),
261}
262#[skip_serializing_none]
263#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
264pub struct LexXrpcQuery {
265 pub description: Option<String>,
266 pub parameters: Option<LexXrpcQueryParameter>,
267 pub output: Option<LexXrpcBody>,
268 pub errors: Option<Vec<LexXrpcError>>,
269}
270
271#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
272#[serde(tag = "type", rename_all = "lowercase")]
273pub enum LexXrpcProcedureParameter {
274 Params(LexXrpcParameters),
275}
276#[skip_serializing_none]
277#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
278pub struct LexXrpcProcedure {
279 pub description: Option<String>,
280 pub parameters: Option<LexXrpcProcedureParameter>,
281 pub input: Option<LexXrpcBody>,
282 pub output: Option<LexXrpcBody>,
283 pub errors: Option<Vec<LexXrpcError>>,
284}
285
286#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
287#[serde(tag = "type", rename_all = "lowercase")]
288pub enum LexXrpcSubscriptionParameter {
289 Params(LexXrpcParameters),
290}
291#[skip_serializing_none]
292#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
293pub struct LexXrpcSubscription {
294 pub description: Option<String>,
295 pub parameters: Option<LexXrpcSubscriptionParameter>,
296 pub message: Option<LexXrpcSubscriptionMessage>,
297 pub infos: Option<Vec<LexXrpcError>>,
298 pub errors: Option<Vec<LexXrpcError>>,
299}
300
301#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
304#[serde(tag = "type", rename_all = "lowercase")]
305pub enum LexRecordRecord {
306 Object(LexObject),
307}
308#[skip_serializing_none]
309#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
310pub struct LexRecord {
311 pub description: Option<String>,
312 pub key: Option<String>,
313 pub record: LexRecordRecord,
314}
315
316#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
319#[serde(tag = "type", rename_all = "kebab-case")]
320pub enum LexUserType {
321 Record(LexRecord),
323 #[serde(rename = "query")]
325 XrpcQuery(LexXrpcQuery),
326 #[serde(rename = "procedure")]
328 XrpcProcedure(LexXrpcProcedure),
329 #[serde(rename = "subscription")]
331 XrpcSubscription(LexXrpcSubscription),
332 Blob(LexBlob),
334 Array(LexArray),
336 Token(LexToken),
338 Object(LexObject),
340 Boolean(LexBoolean),
342 Integer(LexInteger),
344 String(LexString),
346 Bytes(LexBytes),
348 CidLink(LexCidLink),
350 Unknown(LexUnknown),
352}
353
354pub mod record;
355pub mod client;
356pub mod wrapper;