1#![doc = "Generated transport-independent contract objects."]
3
4use std::collections::BTreeMap;
5use std::error::Error as StdError;
6use std::fmt::{self, Display, Formatter};
7
8use serde::{Deserialize, Deserializer, Serialize, Serializer};
9use serde_json::Value;
10use spiral_contract::error::{ErrorEnvelope, ServiceError};
11use spiral_contract::safelong::{SafeLong, SafeUnsignedLong};
12use spiral_contract::strict::{DeserializeStrict, Strict};
13use uuid::Uuid;
14
15#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
17pub struct AwsSession {
18 #[serde(rename = "accessKeyId")]
20 pub access_key_id: String,
21 #[serde(rename = "endpoint")]
23 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub endpoint: Option<String>,
25 #[serde(rename = "expiresAtMicros")]
27 pub expires_at_micros: SafeLong,
28 #[serde(rename = "region")]
30 pub region: String,
31 #[serde(rename = "secretAccessKey")]
33 pub secret_access_key: SecretToken,
34 #[serde(rename = "sessionToken")]
36 pub session_token: SecretToken,
37}
38impl<'de> DeserializeStrict<'de> for AwsSession {
39 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
40 #[derive(Deserialize)]
41 #[serde(deny_unknown_fields)]
42 struct __Wire {
43 #[serde(rename = "accessKeyId")]
44 access_key_id: Strict<String>,
45 #[serde(rename = "endpoint")]
46 #[serde(default)]
47 endpoint: Strict<Option<String>>,
48 #[serde(rename = "expiresAtMicros")]
49 expires_at_micros: Strict<SafeLong>,
50 #[serde(rename = "region")]
51 region: Strict<String>,
52 #[serde(rename = "secretAccessKey")]
53 secret_access_key: Strict<SecretToken>,
54 #[serde(rename = "sessionToken")]
55 session_token: Strict<SecretToken>,
56 }
57 let wire = __Wire::deserialize(deserializer)?;
58 Ok(Self {
59 access_key_id: wire.access_key_id.0,
60 endpoint: wire.endpoint.0,
61 expires_at_micros: wire.expires_at_micros.0,
62 region: wire.region.0,
63 secret_access_key: wire.secret_access_key.0,
64 session_token: wire.session_token.0,
65 })
66 }
67}
68
69#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
71pub struct BeginVersionRequest {
72 #[serde(rename = "baseVersionId")]
74 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub base_version_id: Option<Uuid>,
76 #[serde(rename = "sourceVersionId")]
78 pub source_version_id: String,
79}
80impl<'de> DeserializeStrict<'de> for BeginVersionRequest {
81 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
82 #[derive(Deserialize)]
83 #[serde(deny_unknown_fields)]
84 struct __Wire {
85 #[serde(rename = "baseVersionId")]
86 #[serde(default)]
87 base_version_id: Strict<Option<Uuid>>,
88 #[serde(rename = "sourceVersionId")]
89 source_version_id: Strict<String>,
90 }
91 let wire = __Wire::deserialize(deserializer)?;
92 Ok(Self {
93 base_version_id: wire.base_version_id.0,
94 source_version_id: wire.source_version_id.0,
95 })
96 }
97}
98
99#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
101pub struct BeginVersionResponse {
102 #[serde(rename = "versionId")]
104 pub version_id: Uuid,
105 #[serde(rename = "versionPath")]
107 pub version_path: String,
108}
109impl<'de> DeserializeStrict<'de> for BeginVersionResponse {
110 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
111 #[derive(Deserialize)]
112 #[serde(deny_unknown_fields)]
113 struct __Wire {
114 #[serde(rename = "versionId")]
115 version_id: Strict<Uuid>,
116 #[serde(rename = "versionPath")]
117 version_path: Strict<String>,
118 }
119 let wire = __Wire::deserialize(deserializer)?;
120 Ok(Self {
121 version_id: wire.version_id.0,
122 version_path: wire.version_path.0,
123 })
124 }
125}
126
127#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
129pub struct CreateVectorIndexRequest {
130 #[serde(rename = "definition")]
132 pub definition: Definition,
133 #[serde(rename = "projectId")]
135 pub project_id: String,
136}
137impl<'de> DeserializeStrict<'de> for CreateVectorIndexRequest {
138 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
139 #[derive(Deserialize)]
140 #[serde(deny_unknown_fields)]
141 struct __Wire {
142 #[serde(rename = "definition")]
143 definition: Strict<Definition>,
144 #[serde(rename = "projectId")]
145 project_id: Strict<String>,
146 }
147 let wire = __Wire::deserialize(deserializer)?;
148 Ok(Self {
149 definition: wire.definition.0,
150 project_id: wire.project_id.0,
151 })
152 }
153}
154
155#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
157pub struct CreateVectorIndexResponse {
158 #[serde(rename = "rootUri")]
160 pub root_uri: String,
161 #[serde(rename = "vectorIndexId")]
163 pub vector_index_id: Uuid,
164 #[serde(rename = "versionId")]
166 pub version_id: Uuid,
167}
168impl<'de> DeserializeStrict<'de> for CreateVectorIndexResponse {
169 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
170 #[derive(Deserialize)]
171 #[serde(deny_unknown_fields)]
172 struct __Wire {
173 #[serde(rename = "rootUri")]
174 root_uri: Strict<String>,
175 #[serde(rename = "vectorIndexId")]
176 vector_index_id: Strict<Uuid>,
177 #[serde(rename = "versionId")]
178 version_id: Strict<Uuid>,
179 }
180 let wire = __Wire::deserialize(deserializer)?;
181 Ok(Self {
182 root_uri: wire.root_uri.0,
183 vector_index_id: wire.vector_index_id.0,
184 version_id: wire.version_id.0,
185 })
186 }
187}
188
189#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
191pub struct Definition {
192 #[serde(rename = "dimensions")]
194 pub dimensions: u32,
195 #[serde(rename = "engineId")]
197 pub engine_id: String,
198 #[serde(rename = "engineOptions")]
200 pub engine_options: BTreeMap<String, String>,
201 #[serde(rename = "metric")]
203 pub metric: DistanceMetric,
204 #[serde(rename = "sourceFieldId")]
206 pub source_field_id: Uuid,
207 #[serde(rename = "sourceResourceId")]
209 pub source_resource_id: String,
210 #[serde(rename = "sourceTableId")]
212 pub source_table_id: Uuid,
213}
214impl<'de> DeserializeStrict<'de> for Definition {
215 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
216 #[derive(Deserialize)]
217 #[serde(deny_unknown_fields)]
218 struct __Wire {
219 #[serde(rename = "dimensions")]
220 dimensions: Strict<u32>,
221 #[serde(rename = "engineId")]
222 engine_id: Strict<String>,
223 #[serde(rename = "engineOptions")]
224 engine_options: Strict<BTreeMap<String, String>>,
225 #[serde(rename = "metric")]
226 metric: Strict<DistanceMetric>,
227 #[serde(rename = "sourceFieldId")]
228 source_field_id: Strict<Uuid>,
229 #[serde(rename = "sourceResourceId")]
230 source_resource_id: Strict<String>,
231 #[serde(rename = "sourceTableId")]
232 source_table_id: Strict<Uuid>,
233 }
234 let wire = __Wire::deserialize(deserializer)?;
235 Ok(Self {
236 dimensions: wire.dimensions.0,
237 engine_id: wire.engine_id.0,
238 engine_options: wire.engine_options.0,
239 metric: wire.metric.0,
240 source_field_id: wire.source_field_id.0,
241 source_resource_id: wire.source_resource_id.0,
242 source_table_id: wire.source_table_id.0,
243 })
244 }
245}
246
247#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
249pub struct DirectRead {
250 #[serde(rename = "credential")]
252 pub credential: VendedCredential,
253 #[serde(rename = "uri")]
255 pub uri: String,
256}
257impl<'de> DeserializeStrict<'de> for DirectRead {
258 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
259 #[derive(Deserialize)]
260 #[serde(deny_unknown_fields)]
261 struct __Wire {
262 #[serde(rename = "credential")]
263 credential: Strict<VendedCredential>,
264 #[serde(rename = "uri")]
265 uri: Strict<String>,
266 }
267 let wire = __Wire::deserialize(deserializer)?;
268 Ok(Self {
269 credential: wire.credential.0,
270 uri: wire.uri.0,
271 })
272 }
273}
274
275#[derive(Clone, Debug, PartialEq, Eq)]
277pub enum DistanceMetric {
278 Cosine,
280 Euclidean,
282 Dot,
284 Unknown(String),
286}
287impl Serialize for DistanceMetric {
288 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
289 serializer.serialize_str(match self {
290 Self::Cosine => "cosine",
291 Self::Euclidean => "euclidean",
292 Self::Dot => "dot",
293 Self::Unknown(value) => value,
294 })
295 }
296}
297impl<'de> Deserialize<'de> for DistanceMetric {
298 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
299 Ok(match String::deserialize(deserializer)?.as_str() {
300 "cosine" => Self::Cosine,
301 "euclidean" => Self::Euclidean,
302 "dot" => Self::Dot,
303 value => Self::Unknown(value.to_owned()),
304 })
305 }
306}
307impl<'de> DeserializeStrict<'de> for DistanceMetric {
308 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
309 #[derive(Deserialize)]
310 enum __Known {
311 #[serde(rename = "cosine")]
312 Cosine,
313 #[serde(rename = "euclidean")]
314 Euclidean,
315 #[serde(rename = "dot")]
316 Dot,
317 }
318 Ok(match __Known::deserialize(deserializer)? {
319 __Known::Cosine => Self::Cosine,
320 __Known::Euclidean => Self::Euclidean,
321 __Known::Dot => Self::Dot,
322 })
323 }
324}
325
326#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
328pub struct Empty {}
329impl<'de> DeserializeStrict<'de> for Empty {
330 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
331 #[derive(Deserialize)]
332 #[serde(deny_unknown_fields)]
333 struct __Wire {}
334 __Wire::deserialize(deserializer)?;
335 Ok(Self {})
336 }
337}
338
339#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
341pub struct GcsAccessToken {
342 #[serde(rename = "accessToken")]
344 pub access_token: SecretToken,
345 #[serde(rename = "expiresAtMicros")]
347 pub expires_at_micros: SafeLong,
348}
349impl<'de> DeserializeStrict<'de> for GcsAccessToken {
350 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
351 #[derive(Deserialize)]
352 #[serde(deny_unknown_fields)]
353 struct __Wire {
354 #[serde(rename = "accessToken")]
355 access_token: Strict<SecretToken>,
356 #[serde(rename = "expiresAtMicros")]
357 expires_at_micros: Strict<SafeLong>,
358 }
359 let wire = __Wire::deserialize(deserializer)?;
360 Ok(Self {
361 access_token: wire.access_token.0,
362 expires_at_micros: wire.expires_at_micros.0,
363 })
364 }
365}
366
367#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
369pub struct HuggingFaceToken {
370 #[serde(rename = "endpoint")]
372 pub endpoint: String,
373 #[serde(rename = "expiresAtMicros")]
375 pub expires_at_micros: SafeLong,
376 #[serde(rename = "token")]
378 pub token: SecretToken,
379}
380impl<'de> DeserializeStrict<'de> for HuggingFaceToken {
381 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
382 #[derive(Deserialize)]
383 #[serde(deny_unknown_fields)]
384 struct __Wire {
385 #[serde(rename = "endpoint")]
386 endpoint: Strict<String>,
387 #[serde(rename = "expiresAtMicros")]
388 expires_at_micros: Strict<SafeLong>,
389 #[serde(rename = "token")]
390 token: Strict<SecretToken>,
391 }
392 let wire = __Wire::deserialize(deserializer)?;
393 Ok(Self {
394 endpoint: wire.endpoint.0,
395 expires_at_micros: wire.expires_at_micros.0,
396 token: wire.token.0,
397 })
398 }
399}
400
401#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
404#[serde(transparent)]
405pub struct IndexMetadata(pub String);
406impl std::fmt::Display for IndexMetadata {
407 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
408 self.0.fmt(formatter)
409 }
410}
411impl<'de> DeserializeStrict<'de> for IndexMetadata {
412 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
413 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
414 }
415}
416
417#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
419pub struct PhysicalState {
420 #[serde(rename = "codec")]
422 pub codec: String,
423 #[serde(rename = "codecVersion")]
425 pub codec_version: u32,
426 #[serde(rename = "indexedRows")]
428 pub indexed_rows: SafeUnsignedLong,
429 #[serde(rename = "manifestPath")]
431 pub manifest_path: String,
432 #[serde(rename = "metadata")]
434 pub metadata: IndexMetadata,
435 #[serde(rename = "partitions")]
437 pub partitions: u32,
438}
439impl<'de> DeserializeStrict<'de> for PhysicalState {
440 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
441 #[derive(Deserialize)]
442 #[serde(deny_unknown_fields)]
443 struct __Wire {
444 #[serde(rename = "codec")]
445 codec: Strict<String>,
446 #[serde(rename = "codecVersion")]
447 codec_version: Strict<u32>,
448 #[serde(rename = "indexedRows")]
449 indexed_rows: Strict<SafeUnsignedLong>,
450 #[serde(rename = "manifestPath")]
451 manifest_path: Strict<String>,
452 #[serde(rename = "metadata")]
453 metadata: Strict<IndexMetadata>,
454 #[serde(rename = "partitions")]
455 partitions: Strict<u32>,
456 }
457 let wire = __Wire::deserialize(deserializer)?;
458 Ok(Self {
459 codec: wire.codec.0,
460 codec_version: wire.codec_version.0,
461 indexed_rows: wire.indexed_rows.0,
462 manifest_path: wire.manifest_path.0,
463 metadata: wire.metadata.0,
464 partitions: wire.partitions.0,
465 })
466 }
467}
468
469#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
471pub struct ReadVersionResponse {
472 #[serde(rename = "definition")]
474 pub definition: Definition,
475 #[serde(rename = "rootUri")]
477 pub root_uri: String,
478 #[serde(rename = "version")]
480 pub version: Version,
481}
482impl<'de> DeserializeStrict<'de> for ReadVersionResponse {
483 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
484 #[derive(Deserialize)]
485 #[serde(deny_unknown_fields)]
486 struct __Wire {
487 #[serde(rename = "definition")]
488 definition: Strict<Definition>,
489 #[serde(rename = "rootUri")]
490 root_uri: Strict<String>,
491 #[serde(rename = "version")]
492 version: Strict<Version>,
493 }
494 let wire = __Wire::deserialize(deserializer)?;
495 Ok(Self {
496 definition: wire.definition.0,
497 root_uri: wire.root_uri.0,
498 version: wire.version.0,
499 })
500 }
501}
502
503#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
505pub struct ReviseDefinitionRequest {
506 #[serde(rename = "baseVersionId")]
508 pub base_version_id: Uuid,
509 #[serde(rename = "definition")]
511 pub definition: Definition,
512}
513impl<'de> DeserializeStrict<'de> for ReviseDefinitionRequest {
514 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
515 #[derive(Deserialize)]
516 #[serde(deny_unknown_fields)]
517 struct __Wire {
518 #[serde(rename = "baseVersionId")]
519 base_version_id: Strict<Uuid>,
520 #[serde(rename = "definition")]
521 definition: Strict<Definition>,
522 }
523 let wire = __Wire::deserialize(deserializer)?;
524 Ok(Self {
525 base_version_id: wire.base_version_id.0,
526 definition: wire.definition.0,
527 })
528 }
529}
530
531#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
533pub struct SealVersionRequest {
534 #[serde(rename = "physical")]
536 pub physical: PhysicalState,
537}
538impl<'de> DeserializeStrict<'de> for SealVersionRequest {
539 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
540 #[derive(Deserialize)]
541 #[serde(deny_unknown_fields)]
542 struct __Wire {
543 #[serde(rename = "physical")]
544 physical: Strict<PhysicalState>,
545 }
546 let wire = __Wire::deserialize(deserializer)?;
547 Ok(Self {
548 physical: wire.physical.0,
549 })
550 }
551}
552
553#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
555#[serde(transparent)]
556pub struct SecretToken(pub String);
557impl std::fmt::Debug for SecretToken {
558 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
559 formatter.write_str("SecretToken(<redacted>)")
560 }
561}
562impl<'de> DeserializeStrict<'de> for SecretToken {
563 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
564 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
565 }
566}
567
568#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
570pub struct SignedAccess {
571 #[serde(rename = "directRead")]
573 #[serde(default, skip_serializing_if = "Option::is_none")]
574 pub direct_read: Option<DirectRead>,
575 #[serde(rename = "endpoint")]
577 pub endpoint: String,
578 #[serde(rename = "token")]
580 pub token: SecretToken,
581}
582impl<'de> DeserializeStrict<'de> for SignedAccess {
583 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
584 #[derive(Deserialize)]
585 #[serde(deny_unknown_fields)]
586 struct __Wire {
587 #[serde(rename = "directRead")]
588 #[serde(default)]
589 direct_read: Strict<Option<DirectRead>>,
590 #[serde(rename = "endpoint")]
591 endpoint: Strict<String>,
592 #[serde(rename = "token")]
593 token: Strict<SecretToken>,
594 }
595 let wire = __Wire::deserialize(deserializer)?;
596 Ok(Self {
597 direct_read: wire.direct_read.0,
598 endpoint: wire.endpoint.0,
599 token: wire.token.0,
600 })
601 }
602}
603
604#[derive(Clone, Debug, PartialEq, Eq)]
606pub enum StorageAccess {
607 Signed(SignedAccess),
609 Vended(VendedAccess),
611 Unknown { tag: String, value: Value },
613}
614impl Serialize for StorageAccess {
615 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
616 match self {
617 Self::Signed(value) => {
618 let mut object = serde_json::Map::new();
619 object.insert("type".into(), Value::String("signed".into()));
620 object.insert(
621 "signed".into(),
622 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
623 );
624 Value::Object(object).serialize(serializer)
625 }
626 Self::Vended(value) => {
627 let mut object = serde_json::Map::new();
628 object.insert("type".into(), Value::String("vended".into()));
629 object.insert(
630 "vended".into(),
631 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
632 );
633 Value::Object(object).serialize(serializer)
634 }
635 Self::Unknown { tag, value } => {
636 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
637 return Err(serde::ser::Error::custom(
638 "unknown union discriminator mismatch",
639 ));
640 }
641 value.serialize(serializer)
642 }
643 }
644 }
645}
646impl<'de> Deserialize<'de> for StorageAccess {
647 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
648 let value = Value::deserialize(deserializer)?;
649 let tag = value
650 .get("type")
651 .and_then(Value::as_str)
652 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
653 match tag {
654 "signed" => Ok(Self::Signed(
655 serde_json::from_value(
656 value
657 .get("signed")
658 .cloned()
659 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
660 )
661 .map_err(serde::de::Error::custom)?,
662 )),
663 "vended" => Ok(Self::Vended(
664 serde_json::from_value(
665 value
666 .get("vended")
667 .cloned()
668 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
669 )
670 .map_err(serde::de::Error::custom)?,
671 )),
672 tag => Ok(Self::Unknown {
673 tag: tag.to_owned(),
674 value,
675 }),
676 }
677 }
678}
679impl<'de> DeserializeStrict<'de> for StorageAccess {
680 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
681 #[derive(Deserialize)]
682 enum __Tag0 {
683 #[serde(rename = "signed")]
684 Value,
685 }
686 #[derive(Deserialize)]
687 #[serde(deny_unknown_fields)]
688 struct __Arm0 {
689 #[serde(rename = "type")]
690 _tag: __Tag0,
691 #[serde(rename = "signed")]
692 value: Strict<SignedAccess>,
693 }
694 #[derive(Deserialize)]
695 enum __Tag1 {
696 #[serde(rename = "vended")]
697 Value,
698 }
699 #[derive(Deserialize)]
700 #[serde(deny_unknown_fields)]
701 struct __Arm1 {
702 #[serde(rename = "type")]
703 _tag: __Tag1,
704 #[serde(rename = "vended")]
705 value: Strict<VendedAccess>,
706 }
707 #[derive(Deserialize)]
708 #[serde(untagged)]
709 enum __Known {
710 Signed(Box<__Arm0>),
711 Vended(Box<__Arm1>),
712 }
713 Ok(match __Known::deserialize(deserializer)? {
714 __Known::Signed(arm) => Self::Signed(arm.value.0),
715 __Known::Vended(arm) => Self::Vended(arm.value.0),
716 })
717 }
718}
719
720#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
722pub struct StorageAccessRequest {
723 #[serde(rename = "mode")]
725 pub mode: StorageMode,
726 #[serde(rename = "versionId")]
728 pub version_id: Uuid,
729}
730impl<'de> DeserializeStrict<'de> for StorageAccessRequest {
731 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
732 #[derive(Deserialize)]
733 #[serde(deny_unknown_fields)]
734 struct __Wire {
735 #[serde(rename = "mode")]
736 mode: Strict<StorageMode>,
737 #[serde(rename = "versionId")]
738 version_id: Strict<Uuid>,
739 }
740 let wire = __Wire::deserialize(deserializer)?;
741 Ok(Self {
742 mode: wire.mode.0,
743 version_id: wire.version_id.0,
744 })
745 }
746}
747
748#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
750pub struct StorageAccessResponse {
751 #[serde(rename = "spfsToken")]
753 pub spfs_token: SecretToken,
754 #[serde(rename = "versionPath")]
756 pub version_path: String,
757}
758impl<'de> DeserializeStrict<'de> for StorageAccessResponse {
759 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
760 #[derive(Deserialize)]
761 #[serde(deny_unknown_fields)]
762 struct __Wire {
763 #[serde(rename = "spfsToken")]
764 spfs_token: Strict<SecretToken>,
765 #[serde(rename = "versionPath")]
766 version_path: Strict<String>,
767 }
768 let wire = __Wire::deserialize(deserializer)?;
769 Ok(Self {
770 spfs_token: wire.spfs_token.0,
771 version_path: wire.version_path.0,
772 })
773 }
774}
775
776#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
778pub struct StorageBinding {
779 #[serde(rename = "access")]
781 pub access: StorageAccess,
782 #[serde(rename = "expiresAt")]
784 pub expires_at: SafeUnsignedLong,
785 #[serde(rename = "mode")]
787 pub mode: StorageMode,
788 #[serde(rename = "rootUri")]
790 pub root_uri: String,
791}
792impl<'de> DeserializeStrict<'de> for StorageBinding {
793 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
794 #[derive(Deserialize)]
795 #[serde(deny_unknown_fields)]
796 struct __Wire {
797 #[serde(rename = "access")]
798 access: Strict<StorageAccess>,
799 #[serde(rename = "expiresAt")]
800 expires_at: Strict<SafeUnsignedLong>,
801 #[serde(rename = "mode")]
802 mode: Strict<StorageMode>,
803 #[serde(rename = "rootUri")]
804 root_uri: Strict<String>,
805 }
806 let wire = __Wire::deserialize(deserializer)?;
807 Ok(Self {
808 access: wire.access.0,
809 expires_at: wire.expires_at.0,
810 mode: wire.mode.0,
811 root_uri: wire.root_uri.0,
812 })
813 }
814}
815
816#[derive(Clone, Debug, PartialEq, Eq)]
818pub enum StorageMode {
819 ReadOnly,
821 ReadWrite,
823 Unknown(String),
825}
826impl Serialize for StorageMode {
827 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
828 serializer.serialize_str(match self {
829 Self::ReadOnly => "read_only",
830 Self::ReadWrite => "read_write",
831 Self::Unknown(value) => value,
832 })
833 }
834}
835impl<'de> Deserialize<'de> for StorageMode {
836 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
837 Ok(match String::deserialize(deserializer)?.as_str() {
838 "read_only" => Self::ReadOnly,
839 "read_write" => Self::ReadWrite,
840 value => Self::Unknown(value.to_owned()),
841 })
842 }
843}
844impl<'de> DeserializeStrict<'de> for StorageMode {
845 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
846 #[derive(Deserialize)]
847 enum __Known {
848 #[serde(rename = "read_only")]
849 ReadOnly,
850 #[serde(rename = "read_write")]
851 ReadWrite,
852 }
853 Ok(match __Known::deserialize(deserializer)? {
854 __Known::ReadOnly => Self::ReadOnly,
855 __Known::ReadWrite => Self::ReadWrite,
856 })
857 }
858}
859
860#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
862pub struct VendedAccess {
863 #[serde(rename = "credential")]
865 pub credential: VendedCredential,
866}
867impl<'de> DeserializeStrict<'de> for VendedAccess {
868 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
869 #[derive(Deserialize)]
870 #[serde(deny_unknown_fields)]
871 struct __Wire {
872 #[serde(rename = "credential")]
873 credential: Strict<VendedCredential>,
874 }
875 let wire = __Wire::deserialize(deserializer)?;
876 Ok(Self {
877 credential: wire.credential.0,
878 })
879 }
880}
881
882#[derive(Clone, Debug, PartialEq, Eq)]
884pub enum VendedCredential {
885 AwsSession(AwsSession),
887 GcsAccessToken(GcsAccessToken),
889 HuggingFaceToken(HuggingFaceToken),
891 Unknown { tag: String, value: Value },
893}
894impl Serialize for VendedCredential {
895 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
896 match self {
897 Self::AwsSession(value) => {
898 let mut object = serde_json::Map::new();
899 object.insert("type".into(), Value::String("awsSession".into()));
900 object.insert(
901 "awsSession".into(),
902 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
903 );
904 Value::Object(object).serialize(serializer)
905 }
906 Self::GcsAccessToken(value) => {
907 let mut object = serde_json::Map::new();
908 object.insert("type".into(), Value::String("gcsAccessToken".into()));
909 object.insert(
910 "gcsAccessToken".into(),
911 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
912 );
913 Value::Object(object).serialize(serializer)
914 }
915 Self::HuggingFaceToken(value) => {
916 let mut object = serde_json::Map::new();
917 object.insert("type".into(), Value::String("huggingFaceToken".into()));
918 object.insert(
919 "huggingFaceToken".into(),
920 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
921 );
922 Value::Object(object).serialize(serializer)
923 }
924 Self::Unknown { tag, value } => {
925 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
926 return Err(serde::ser::Error::custom(
927 "unknown union discriminator mismatch",
928 ));
929 }
930 value.serialize(serializer)
931 }
932 }
933 }
934}
935impl<'de> Deserialize<'de> for VendedCredential {
936 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
937 let value = Value::deserialize(deserializer)?;
938 let tag = value
939 .get("type")
940 .and_then(Value::as_str)
941 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
942 match tag {
943 "awsSession" => Ok(Self::AwsSession(
944 serde_json::from_value(
945 value
946 .get("awsSession")
947 .cloned()
948 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
949 )
950 .map_err(serde::de::Error::custom)?,
951 )),
952 "gcsAccessToken" => Ok(Self::GcsAccessToken(
953 serde_json::from_value(
954 value
955 .get("gcsAccessToken")
956 .cloned()
957 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
958 )
959 .map_err(serde::de::Error::custom)?,
960 )),
961 "huggingFaceToken" => Ok(Self::HuggingFaceToken(
962 serde_json::from_value(
963 value
964 .get("huggingFaceToken")
965 .cloned()
966 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
967 )
968 .map_err(serde::de::Error::custom)?,
969 )),
970 tag => Ok(Self::Unknown {
971 tag: tag.to_owned(),
972 value,
973 }),
974 }
975 }
976}
977impl<'de> DeserializeStrict<'de> for VendedCredential {
978 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
979 #[derive(Deserialize)]
980 enum __Tag0 {
981 #[serde(rename = "awsSession")]
982 Value,
983 }
984 #[derive(Deserialize)]
985 #[serde(deny_unknown_fields)]
986 struct __Arm0 {
987 #[serde(rename = "type")]
988 _tag: __Tag0,
989 #[serde(rename = "awsSession")]
990 value: Strict<AwsSession>,
991 }
992 #[derive(Deserialize)]
993 enum __Tag1 {
994 #[serde(rename = "gcsAccessToken")]
995 Value,
996 }
997 #[derive(Deserialize)]
998 #[serde(deny_unknown_fields)]
999 struct __Arm1 {
1000 #[serde(rename = "type")]
1001 _tag: __Tag1,
1002 #[serde(rename = "gcsAccessToken")]
1003 value: Strict<GcsAccessToken>,
1004 }
1005 #[derive(Deserialize)]
1006 enum __Tag2 {
1007 #[serde(rename = "huggingFaceToken")]
1008 Value,
1009 }
1010 #[derive(Deserialize)]
1011 #[serde(deny_unknown_fields)]
1012 struct __Arm2 {
1013 #[serde(rename = "type")]
1014 _tag: __Tag2,
1015 #[serde(rename = "huggingFaceToken")]
1016 value: Strict<HuggingFaceToken>,
1017 }
1018 #[derive(Deserialize)]
1019 #[serde(untagged)]
1020 enum __Known {
1021 AwsSession(Box<__Arm0>),
1022 GcsAccessToken(Box<__Arm1>),
1023 HuggingFaceToken(Box<__Arm2>),
1024 }
1025 Ok(match __Known::deserialize(deserializer)? {
1026 __Known::AwsSession(arm) => Self::AwsSession(arm.value.0),
1027 __Known::GcsAccessToken(arm) => Self::GcsAccessToken(arm.value.0),
1028 __Known::HuggingFaceToken(arm) => Self::HuggingFaceToken(arm.value.0),
1029 })
1030 }
1031}
1032
1033#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1035pub struct Version {
1036 #[serde(rename = "createdAtMicros")]
1038 pub created_at_micros: SafeLong,
1039 #[serde(rename = "parentVersionId")]
1041 #[serde(default, skip_serializing_if = "Option::is_none")]
1042 pub parent_version_id: Option<Uuid>,
1043 #[serde(rename = "physical")]
1045 #[serde(default, skip_serializing_if = "Option::is_none")]
1046 pub physical: Option<PhysicalState>,
1047 #[serde(rename = "sealedAtMicros")]
1049 #[serde(default, skip_serializing_if = "Option::is_none")]
1050 pub sealed_at_micros: Option<SafeLong>,
1051 #[serde(rename = "sourceVersionId")]
1053 #[serde(default, skip_serializing_if = "Option::is_none")]
1054 pub source_version_id: Option<String>,
1055 #[serde(rename = "vectorIndexId")]
1057 pub vector_index_id: Uuid,
1058 #[serde(rename = "versionId")]
1060 pub version_id: Uuid,
1061}
1062impl<'de> DeserializeStrict<'de> for Version {
1063 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1064 #[derive(Deserialize)]
1065 #[serde(deny_unknown_fields)]
1066 struct __Wire {
1067 #[serde(rename = "createdAtMicros")]
1068 created_at_micros: Strict<SafeLong>,
1069 #[serde(rename = "parentVersionId")]
1070 #[serde(default)]
1071 parent_version_id: Strict<Option<Uuid>>,
1072 #[serde(rename = "physical")]
1073 #[serde(default)]
1074 physical: Strict<Option<PhysicalState>>,
1075 #[serde(rename = "sealedAtMicros")]
1076 #[serde(default)]
1077 sealed_at_micros: Strict<Option<SafeLong>>,
1078 #[serde(rename = "sourceVersionId")]
1079 #[serde(default)]
1080 source_version_id: Strict<Option<String>>,
1081 #[serde(rename = "vectorIndexId")]
1082 vector_index_id: Strict<Uuid>,
1083 #[serde(rename = "versionId")]
1084 version_id: Strict<Uuid>,
1085 }
1086 let wire = __Wire::deserialize(deserializer)?;
1087 Ok(Self {
1088 created_at_micros: wire.created_at_micros.0,
1089 parent_version_id: wire.parent_version_id.0,
1090 physical: wire.physical.0,
1091 sealed_at_micros: wire.sealed_at_micros.0,
1092 source_version_id: wire.source_version_id.0,
1093 vector_index_id: wire.vector_index_id.0,
1094 version_id: wire.version_id.0,
1095 })
1096 }
1097}
1098
1099#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1101pub struct VersionResponse {
1102 #[serde(rename = "version")]
1104 pub version: Version,
1105}
1106impl<'de> DeserializeStrict<'de> for VersionResponse {
1107 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1108 #[derive(Deserialize)]
1109 #[serde(deny_unknown_fields)]
1110 struct __Wire {
1111 #[serde(rename = "version")]
1112 version: Strict<Version>,
1113 }
1114 let wire = __Wire::deserialize(deserializer)?;
1115 Ok(Self {
1116 version: wire.version.0,
1117 })
1118 }
1119}
1120
1121#[derive(Clone, Debug, PartialEq, Eq)]
1123pub enum VectorIndexesError {
1124 Conflict { reason: String },
1126 InvalidArgument { reason: String },
1128 NotFound { resource: String },
1130}
1131impl VectorIndexesError {
1132 pub fn status(&self) -> u16 {
1134 match self {
1135 Self::Conflict { .. } => 409,
1136 Self::InvalidArgument { .. } => 400,
1137 Self::NotFound { .. } => 404,
1138 }
1139 }
1140 pub fn envelope(&self, instance: String) -> ErrorEnvelope {
1142 match self {
1143 Self::Conflict { reason } => {
1144 let mut envelope =
1145 ErrorEnvelope::new("CONFLICT", "VectorIndexes:Conflict", instance);
1146 envelope
1147 .parameters
1148 .insert("reason".into(), reason.to_string());
1149 envelope
1150 }
1151 Self::InvalidArgument { reason } => {
1152 let mut envelope = ErrorEnvelope::new(
1153 "INVALID_ARGUMENT",
1154 "VectorIndexes:InvalidArgument",
1155 instance,
1156 );
1157 envelope
1158 .parameters
1159 .insert("reason".into(), reason.to_string());
1160 envelope
1161 }
1162 Self::NotFound { resource } => {
1163 let mut envelope =
1164 ErrorEnvelope::new("NOT_FOUND", "VectorIndexes:NotFound", instance);
1165 envelope
1166 .parameters
1167 .insert("resource".into(), resource.to_string());
1168 envelope
1169 }
1170 }
1171 }
1172 pub fn decode_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
1174 if envelope.error_instance_id.len() != 36
1175 || Uuid::parse_str(&envelope.error_instance_id).is_err()
1176 {
1177 return None;
1178 }
1179 match envelope.error_name.as_str() {
1180 "VectorIndexes:Conflict" => {
1181 if envelope.error_code != "CONFLICT" {
1182 return None;
1183 }
1184 let reason = envelope.parameters.get("reason")?.clone();
1185 Some(Self::Conflict { reason })
1186 }
1187 "VectorIndexes:InvalidArgument" => {
1188 if envelope.error_code != "INVALID_ARGUMENT" {
1189 return None;
1190 }
1191 let reason = envelope.parameters.get("reason")?.clone();
1192 Some(Self::InvalidArgument { reason })
1193 }
1194 "VectorIndexes:NotFound" => {
1195 if envelope.error_code != "NOT_FOUND" {
1196 return None;
1197 }
1198 let resource = envelope.parameters.get("resource")?.clone();
1199 Some(Self::NotFound { resource })
1200 }
1201 _ => None,
1202 }
1203 }
1204}
1205impl Display for VectorIndexesError {
1206 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
1207 match self {
1208 Self::Conflict { reason } => {
1209 write!(formatter, "VectorIndexes:Conflict (reason: {})", reason)
1210 }
1211 Self::InvalidArgument { reason } => write!(
1212 formatter,
1213 "VectorIndexes:InvalidArgument (reason: {})",
1214 reason
1215 ),
1216 Self::NotFound { resource } => {
1217 write!(formatter, "VectorIndexes:NotFound (resource: {})", resource)
1218 }
1219 }
1220 }
1221}
1222impl StdError for VectorIndexesError {}
1223impl ServiceError for VectorIndexesError {
1224 fn to_envelope(&self, instance: String) -> ErrorEnvelope {
1225 Self::envelope(self, instance)
1226 }
1227 fn from_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
1228 Self::decode_envelope(envelope)
1229 }
1230}