1#![doc = "Generated transport-independent contract objects."]
3
4use std::error::Error as StdError;
5use std::fmt::{self, Display, Formatter};
6
7use serde::{Deserialize, Deserializer, Serialize, Serializer};
8use serde_json::Value;
9use spiral_contract::error::{ErrorEnvelope, ServiceError};
10use spiral_contract::strict::{DeserializeStrict, Strict};
11use uuid::Uuid;
12
13#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
15pub struct AwsAccessKey {
16 #[serde(rename = "accessKeyId")]
18 pub access_key_id: String,
19 #[serde(rename = "region")]
21 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub region: Option<String>,
23 #[serde(rename = "secretAccessKey")]
25 pub secret_access_key: SecretToken,
26}
27impl<'de> DeserializeStrict<'de> for AwsAccessKey {
28 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29 #[derive(Deserialize)]
30 #[serde(deny_unknown_fields)]
31 struct __Wire {
32 #[serde(rename = "accessKeyId")]
33 access_key_id: Strict<String>,
34 #[serde(rename = "region")]
35 #[serde(default)]
36 region: Strict<Option<String>>,
37 #[serde(rename = "secretAccessKey")]
38 secret_access_key: Strict<SecretToken>,
39 }
40 let wire = __Wire::deserialize(deserializer)?;
41 Ok(Self {
42 access_key_id: wire.access_key_id.0,
43 region: wire.region.0,
44 secret_access_key: wire.secret_access_key.0,
45 })
46 }
47}
48
49#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
51pub struct AwsAccessKeyConfig {
52 #[serde(rename = "accessKeyId")]
54 pub access_key_id: String,
55 #[serde(rename = "region")]
57 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub region: Option<String>,
59}
60impl<'de> DeserializeStrict<'de> for AwsAccessKeyConfig {
61 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
62 #[derive(Deserialize)]
63 #[serde(deny_unknown_fields)]
64 struct __Wire {
65 #[serde(rename = "accessKeyId")]
66 access_key_id: Strict<String>,
67 #[serde(rename = "region")]
68 #[serde(default)]
69 region: Strict<Option<String>>,
70 }
71 let wire = __Wire::deserialize(deserializer)?;
72 Ok(Self {
73 access_key_id: wire.access_key_id.0,
74 region: wire.region.0,
75 })
76 }
77}
78
79#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
81pub struct AwsOidc {
82 #[serde(rename = "region")]
84 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub region: Option<String>,
86 #[serde(rename = "roleArn")]
88 pub role_arn: String,
89}
90impl<'de> DeserializeStrict<'de> for AwsOidc {
91 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
92 #[derive(Deserialize)]
93 #[serde(deny_unknown_fields)]
94 struct __Wire {
95 #[serde(rename = "region")]
96 #[serde(default)]
97 region: Strict<Option<String>>,
98 #[serde(rename = "roleArn")]
99 role_arn: Strict<String>,
100 }
101 let wire = __Wire::deserialize(deserializer)?;
102 Ok(Self {
103 region: wire.region.0,
104 role_arn: wire.role_arn.0,
105 })
106 }
107}
108
109#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
111pub struct AwsOidcConfig {
112 #[serde(rename = "region")]
114 #[serde(default, skip_serializing_if = "Option::is_none")]
115 pub region: Option<String>,
116 #[serde(rename = "roleArn")]
118 pub role_arn: String,
119}
120impl<'de> DeserializeStrict<'de> for AwsOidcConfig {
121 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
122 #[derive(Deserialize)]
123 #[serde(deny_unknown_fields)]
124 struct __Wire {
125 #[serde(rename = "region")]
126 #[serde(default)]
127 region: Strict<Option<String>>,
128 #[serde(rename = "roleArn")]
129 role_arn: Strict<String>,
130 }
131 let wire = __Wire::deserialize(deserializer)?;
132 Ok(Self {
133 region: wire.region.0,
134 role_arn: wire.role_arn.0,
135 })
136 }
137}
138
139#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
141pub struct BuiltinFileSystem {
142 #[serde(rename = "directory")]
144 pub directory: String,
145 #[serde(rename = "provider")]
147 pub provider: String,
148}
149impl<'de> DeserializeStrict<'de> for BuiltinFileSystem {
150 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
151 #[derive(Deserialize)]
152 #[serde(deny_unknown_fields)]
153 struct __Wire {
154 #[serde(rename = "directory")]
155 directory: Strict<String>,
156 #[serde(rename = "provider")]
157 provider: Strict<String>,
158 }
159 let wire = __Wire::deserialize(deserializer)?;
160 Ok(Self {
161 directory: wire.directory.0,
162 provider: wire.provider.0,
163 })
164 }
165}
166
167#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
169pub struct CephAccessKey {
170 #[serde(rename = "accessKeyId")]
172 pub access_key_id: String,
173 #[serde(rename = "endpoint")]
175 pub endpoint: String,
176 #[serde(rename = "region")]
178 #[serde(default, skip_serializing_if = "Option::is_none")]
179 pub region: Option<String>,
180 #[serde(rename = "roleArn")]
182 pub role_arn: String,
183 #[serde(rename = "secretAccessKey")]
185 pub secret_access_key: SecretToken,
186}
187impl<'de> DeserializeStrict<'de> for CephAccessKey {
188 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
189 #[derive(Deserialize)]
190 #[serde(deny_unknown_fields)]
191 struct __Wire {
192 #[serde(rename = "accessKeyId")]
193 access_key_id: Strict<String>,
194 #[serde(rename = "endpoint")]
195 endpoint: Strict<String>,
196 #[serde(rename = "region")]
197 #[serde(default)]
198 region: Strict<Option<String>>,
199 #[serde(rename = "roleArn")]
200 role_arn: Strict<String>,
201 #[serde(rename = "secretAccessKey")]
202 secret_access_key: Strict<SecretToken>,
203 }
204 let wire = __Wire::deserialize(deserializer)?;
205 Ok(Self {
206 access_key_id: wire.access_key_id.0,
207 endpoint: wire.endpoint.0,
208 region: wire.region.0,
209 role_arn: wire.role_arn.0,
210 secret_access_key: wire.secret_access_key.0,
211 })
212 }
213}
214
215#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
217pub struct CephAccessKeyConfig {
218 #[serde(rename = "accessKeyId")]
220 pub access_key_id: String,
221 #[serde(rename = "endpoint")]
223 pub endpoint: String,
224 #[serde(rename = "region")]
226 #[serde(default, skip_serializing_if = "Option::is_none")]
227 pub region: Option<String>,
228 #[serde(rename = "roleArn")]
230 pub role_arn: String,
231}
232impl<'de> DeserializeStrict<'de> for CephAccessKeyConfig {
233 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
234 #[derive(Deserialize)]
235 #[serde(deny_unknown_fields)]
236 struct __Wire {
237 #[serde(rename = "accessKeyId")]
238 access_key_id: Strict<String>,
239 #[serde(rename = "endpoint")]
240 endpoint: Strict<String>,
241 #[serde(rename = "region")]
242 #[serde(default)]
243 region: Strict<Option<String>>,
244 #[serde(rename = "roleArn")]
245 role_arn: Strict<String>,
246 }
247 let wire = __Wire::deserialize(deserializer)?;
248 Ok(Self {
249 access_key_id: wire.access_key_id.0,
250 endpoint: wire.endpoint.0,
251 region: wire.region.0,
252 role_arn: wire.role_arn.0,
253 })
254 }
255}
256
257#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
259pub struct CephOidc {
260 #[serde(rename = "endpoint")]
262 pub endpoint: String,
263 #[serde(rename = "region")]
265 #[serde(default, skip_serializing_if = "Option::is_none")]
266 pub region: Option<String>,
267 #[serde(rename = "roleArn")]
269 pub role_arn: String,
270}
271impl<'de> DeserializeStrict<'de> for CephOidc {
272 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
273 #[derive(Deserialize)]
274 #[serde(deny_unknown_fields)]
275 struct __Wire {
276 #[serde(rename = "endpoint")]
277 endpoint: Strict<String>,
278 #[serde(rename = "region")]
279 #[serde(default)]
280 region: Strict<Option<String>>,
281 #[serde(rename = "roleArn")]
282 role_arn: Strict<String>,
283 }
284 let wire = __Wire::deserialize(deserializer)?;
285 Ok(Self {
286 endpoint: wire.endpoint.0,
287 region: wire.region.0,
288 role_arn: wire.role_arn.0,
289 })
290 }
291}
292
293#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
295pub struct CephOidcConfig {
296 #[serde(rename = "endpoint")]
298 pub endpoint: String,
299 #[serde(rename = "region")]
301 #[serde(default, skip_serializing_if = "Option::is_none")]
302 pub region: Option<String>,
303 #[serde(rename = "roleArn")]
305 pub role_arn: String,
306}
307impl<'de> DeserializeStrict<'de> for CephOidcConfig {
308 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
309 #[derive(Deserialize)]
310 #[serde(deny_unknown_fields)]
311 struct __Wire {
312 #[serde(rename = "endpoint")]
313 endpoint: Strict<String>,
314 #[serde(rename = "region")]
315 #[serde(default)]
316 region: Strict<Option<String>>,
317 #[serde(rename = "roleArn")]
318 role_arn: Strict<String>,
319 }
320 let wire = __Wire::deserialize(deserializer)?;
321 Ok(Self {
322 endpoint: wire.endpoint.0,
323 region: wire.region.0,
324 role_arn: wire.role_arn.0,
325 })
326 }
327}
328
329#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
331pub struct CreateMountRequest {
332 #[serde(rename = "belongsTo")]
334 #[serde(default, skip_serializing_if = "Option::is_none")]
335 pub belongs_to: Option<String>,
336 #[serde(rename = "directory")]
338 pub directory: String,
339 #[serde(rename = "mode")]
341 pub mode: MountMode,
342 #[serde(rename = "principal")]
344 pub principal: String,
345}
346impl<'de> DeserializeStrict<'de> for CreateMountRequest {
347 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
348 #[derive(Deserialize)]
349 #[serde(deny_unknown_fields)]
350 struct __Wire {
351 #[serde(rename = "belongsTo")]
352 #[serde(default)]
353 belongs_to: Strict<Option<String>>,
354 #[serde(rename = "directory")]
355 directory: Strict<String>,
356 #[serde(rename = "mode")]
357 mode: Strict<MountMode>,
358 #[serde(rename = "principal")]
359 principal: Strict<String>,
360 }
361 let wire = __Wire::deserialize(deserializer)?;
362 Ok(Self {
363 belongs_to: wire.belongs_to.0,
364 directory: wire.directory.0,
365 mode: wire.mode.0,
366 principal: wire.principal.0,
367 })
368 }
369}
370
371#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
373pub struct CreateMountResponse {
374 #[serde(rename = "mount")]
376 pub mount: Mount,
377}
378impl<'de> DeserializeStrict<'de> for CreateMountResponse {
379 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
380 #[derive(Deserialize)]
381 #[serde(deny_unknown_fields)]
382 struct __Wire {
383 #[serde(rename = "mount")]
384 mount: Strict<Mount>,
385 }
386 let wire = __Wire::deserialize(deserializer)?;
387 Ok(Self {
388 mount: wire.mount.0,
389 })
390 }
391}
392
393#[derive(Clone, Debug, PartialEq, Eq)]
396pub enum Credential {
397 AwsAccessKey(AwsAccessKey),
399 AwsOidc(AwsOidc),
401 CephAccessKey(CephAccessKey),
403 CephOidc(CephOidc),
405 GcsOidc(GcsOidc),
407 GcsServiceAccountKey(GcsServiceAccountKey),
409 HuggingFaceToken(HuggingFaceCredential),
411 MinioAccessKey(S3AccessKey),
413 R2AccessKey(R2AccessKey),
415 RustfsAccessKey(S3AccessKey),
417 S3LikeAccessKey(S3AccessKey),
419 Unknown { tag: String, value: Value },
421}
422impl Serialize for Credential {
423 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
424 match self {
425 Self::AwsAccessKey(value) => {
426 let mut object = serde_json::Map::new();
427 object.insert("type".into(), Value::String("awsAccessKey".into()));
428 object.insert(
429 "awsAccessKey".into(),
430 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
431 );
432 Value::Object(object).serialize(serializer)
433 }
434 Self::AwsOidc(value) => {
435 let mut object = serde_json::Map::new();
436 object.insert("type".into(), Value::String("awsOidc".into()));
437 object.insert(
438 "awsOidc".into(),
439 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
440 );
441 Value::Object(object).serialize(serializer)
442 }
443 Self::CephAccessKey(value) => {
444 let mut object = serde_json::Map::new();
445 object.insert("type".into(), Value::String("cephAccessKey".into()));
446 object.insert(
447 "cephAccessKey".into(),
448 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
449 );
450 Value::Object(object).serialize(serializer)
451 }
452 Self::CephOidc(value) => {
453 let mut object = serde_json::Map::new();
454 object.insert("type".into(), Value::String("cephOidc".into()));
455 object.insert(
456 "cephOidc".into(),
457 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
458 );
459 Value::Object(object).serialize(serializer)
460 }
461 Self::GcsOidc(value) => {
462 let mut object = serde_json::Map::new();
463 object.insert("type".into(), Value::String("gcsOidc".into()));
464 object.insert(
465 "gcsOidc".into(),
466 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
467 );
468 Value::Object(object).serialize(serializer)
469 }
470 Self::GcsServiceAccountKey(value) => {
471 let mut object = serde_json::Map::new();
472 object.insert("type".into(), Value::String("gcsServiceAccountKey".into()));
473 object.insert(
474 "gcsServiceAccountKey".into(),
475 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
476 );
477 Value::Object(object).serialize(serializer)
478 }
479 Self::HuggingFaceToken(value) => {
480 let mut object = serde_json::Map::new();
481 object.insert("type".into(), Value::String("huggingFaceToken".into()));
482 object.insert(
483 "huggingFaceToken".into(),
484 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
485 );
486 Value::Object(object).serialize(serializer)
487 }
488 Self::MinioAccessKey(value) => {
489 let mut object = serde_json::Map::new();
490 object.insert("type".into(), Value::String("minioAccessKey".into()));
491 object.insert(
492 "minioAccessKey".into(),
493 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
494 );
495 Value::Object(object).serialize(serializer)
496 }
497 Self::R2AccessKey(value) => {
498 let mut object = serde_json::Map::new();
499 object.insert("type".into(), Value::String("r2AccessKey".into()));
500 object.insert(
501 "r2AccessKey".into(),
502 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
503 );
504 Value::Object(object).serialize(serializer)
505 }
506 Self::RustfsAccessKey(value) => {
507 let mut object = serde_json::Map::new();
508 object.insert("type".into(), Value::String("rustfsAccessKey".into()));
509 object.insert(
510 "rustfsAccessKey".into(),
511 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
512 );
513 Value::Object(object).serialize(serializer)
514 }
515 Self::S3LikeAccessKey(value) => {
516 let mut object = serde_json::Map::new();
517 object.insert("type".into(), Value::String("s3LikeAccessKey".into()));
518 object.insert(
519 "s3LikeAccessKey".into(),
520 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
521 );
522 Value::Object(object).serialize(serializer)
523 }
524 Self::Unknown { tag, value } => {
525 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
526 return Err(serde::ser::Error::custom(
527 "unknown union discriminator mismatch",
528 ));
529 }
530 value.serialize(serializer)
531 }
532 }
533 }
534}
535impl<'de> Deserialize<'de> for Credential {
536 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
537 let value = Value::deserialize(deserializer)?;
538 let tag = value
539 .get("type")
540 .and_then(Value::as_str)
541 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
542 match tag {
543 "awsAccessKey" => Ok(Self::AwsAccessKey(
544 serde_json::from_value(
545 value
546 .get("awsAccessKey")
547 .cloned()
548 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
549 )
550 .map_err(serde::de::Error::custom)?,
551 )),
552 "awsOidc" => Ok(Self::AwsOidc(
553 serde_json::from_value(
554 value
555 .get("awsOidc")
556 .cloned()
557 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
558 )
559 .map_err(serde::de::Error::custom)?,
560 )),
561 "cephAccessKey" => Ok(Self::CephAccessKey(
562 serde_json::from_value(
563 value
564 .get("cephAccessKey")
565 .cloned()
566 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
567 )
568 .map_err(serde::de::Error::custom)?,
569 )),
570 "cephOidc" => Ok(Self::CephOidc(
571 serde_json::from_value(
572 value
573 .get("cephOidc")
574 .cloned()
575 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
576 )
577 .map_err(serde::de::Error::custom)?,
578 )),
579 "gcsOidc" => Ok(Self::GcsOidc(
580 serde_json::from_value(
581 value
582 .get("gcsOidc")
583 .cloned()
584 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
585 )
586 .map_err(serde::de::Error::custom)?,
587 )),
588 "gcsServiceAccountKey" => Ok(Self::GcsServiceAccountKey(
589 serde_json::from_value(
590 value
591 .get("gcsServiceAccountKey")
592 .cloned()
593 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
594 )
595 .map_err(serde::de::Error::custom)?,
596 )),
597 "huggingFaceToken" => Ok(Self::HuggingFaceToken(
598 serde_json::from_value(
599 value
600 .get("huggingFaceToken")
601 .cloned()
602 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
603 )
604 .map_err(serde::de::Error::custom)?,
605 )),
606 "minioAccessKey" => Ok(Self::MinioAccessKey(
607 serde_json::from_value(
608 value
609 .get("minioAccessKey")
610 .cloned()
611 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
612 )
613 .map_err(serde::de::Error::custom)?,
614 )),
615 "r2AccessKey" => Ok(Self::R2AccessKey(
616 serde_json::from_value(
617 value
618 .get("r2AccessKey")
619 .cloned()
620 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
621 )
622 .map_err(serde::de::Error::custom)?,
623 )),
624 "rustfsAccessKey" => Ok(Self::RustfsAccessKey(
625 serde_json::from_value(
626 value
627 .get("rustfsAccessKey")
628 .cloned()
629 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
630 )
631 .map_err(serde::de::Error::custom)?,
632 )),
633 "s3LikeAccessKey" => Ok(Self::S3LikeAccessKey(
634 serde_json::from_value(
635 value
636 .get("s3LikeAccessKey")
637 .cloned()
638 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
639 )
640 .map_err(serde::de::Error::custom)?,
641 )),
642 tag => Ok(Self::Unknown {
643 tag: tag.to_owned(),
644 value,
645 }),
646 }
647 }
648}
649impl<'de> DeserializeStrict<'de> for Credential {
650 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
651 #[derive(Deserialize)]
652 enum __Tag0 {
653 #[serde(rename = "awsAccessKey")]
654 Value,
655 }
656 #[derive(Deserialize)]
657 #[serde(deny_unknown_fields)]
658 struct __Arm0 {
659 #[serde(rename = "type")]
660 _tag: __Tag0,
661 #[serde(rename = "awsAccessKey")]
662 value: Strict<AwsAccessKey>,
663 }
664 #[derive(Deserialize)]
665 enum __Tag1 {
666 #[serde(rename = "awsOidc")]
667 Value,
668 }
669 #[derive(Deserialize)]
670 #[serde(deny_unknown_fields)]
671 struct __Arm1 {
672 #[serde(rename = "type")]
673 _tag: __Tag1,
674 #[serde(rename = "awsOidc")]
675 value: Strict<AwsOidc>,
676 }
677 #[derive(Deserialize)]
678 enum __Tag2 {
679 #[serde(rename = "cephAccessKey")]
680 Value,
681 }
682 #[derive(Deserialize)]
683 #[serde(deny_unknown_fields)]
684 struct __Arm2 {
685 #[serde(rename = "type")]
686 _tag: __Tag2,
687 #[serde(rename = "cephAccessKey")]
688 value: Strict<CephAccessKey>,
689 }
690 #[derive(Deserialize)]
691 enum __Tag3 {
692 #[serde(rename = "cephOidc")]
693 Value,
694 }
695 #[derive(Deserialize)]
696 #[serde(deny_unknown_fields)]
697 struct __Arm3 {
698 #[serde(rename = "type")]
699 _tag: __Tag3,
700 #[serde(rename = "cephOidc")]
701 value: Strict<CephOidc>,
702 }
703 #[derive(Deserialize)]
704 enum __Tag4 {
705 #[serde(rename = "gcsOidc")]
706 Value,
707 }
708 #[derive(Deserialize)]
709 #[serde(deny_unknown_fields)]
710 struct __Arm4 {
711 #[serde(rename = "type")]
712 _tag: __Tag4,
713 #[serde(rename = "gcsOidc")]
714 value: Strict<GcsOidc>,
715 }
716 #[derive(Deserialize)]
717 enum __Tag5 {
718 #[serde(rename = "gcsServiceAccountKey")]
719 Value,
720 }
721 #[derive(Deserialize)]
722 #[serde(deny_unknown_fields)]
723 struct __Arm5 {
724 #[serde(rename = "type")]
725 _tag: __Tag5,
726 #[serde(rename = "gcsServiceAccountKey")]
727 value: Strict<GcsServiceAccountKey>,
728 }
729 #[derive(Deserialize)]
730 enum __Tag6 {
731 #[serde(rename = "huggingFaceToken")]
732 Value,
733 }
734 #[derive(Deserialize)]
735 #[serde(deny_unknown_fields)]
736 struct __Arm6 {
737 #[serde(rename = "type")]
738 _tag: __Tag6,
739 #[serde(rename = "huggingFaceToken")]
740 value: Strict<HuggingFaceCredential>,
741 }
742 #[derive(Deserialize)]
743 enum __Tag7 {
744 #[serde(rename = "minioAccessKey")]
745 Value,
746 }
747 #[derive(Deserialize)]
748 #[serde(deny_unknown_fields)]
749 struct __Arm7 {
750 #[serde(rename = "type")]
751 _tag: __Tag7,
752 #[serde(rename = "minioAccessKey")]
753 value: Strict<S3AccessKey>,
754 }
755 #[derive(Deserialize)]
756 enum __Tag8 {
757 #[serde(rename = "r2AccessKey")]
758 Value,
759 }
760 #[derive(Deserialize)]
761 #[serde(deny_unknown_fields)]
762 struct __Arm8 {
763 #[serde(rename = "type")]
764 _tag: __Tag8,
765 #[serde(rename = "r2AccessKey")]
766 value: Strict<R2AccessKey>,
767 }
768 #[derive(Deserialize)]
769 enum __Tag9 {
770 #[serde(rename = "rustfsAccessKey")]
771 Value,
772 }
773 #[derive(Deserialize)]
774 #[serde(deny_unknown_fields)]
775 struct __Arm9 {
776 #[serde(rename = "type")]
777 _tag: __Tag9,
778 #[serde(rename = "rustfsAccessKey")]
779 value: Strict<S3AccessKey>,
780 }
781 #[derive(Deserialize)]
782 enum __Tag10 {
783 #[serde(rename = "s3LikeAccessKey")]
784 Value,
785 }
786 #[derive(Deserialize)]
787 #[serde(deny_unknown_fields)]
788 struct __Arm10 {
789 #[serde(rename = "type")]
790 _tag: __Tag10,
791 #[serde(rename = "s3LikeAccessKey")]
792 value: Strict<S3AccessKey>,
793 }
794 #[derive(Deserialize)]
795 #[serde(untagged)]
796 enum __Known {
797 AwsAccessKey(Box<__Arm0>),
798 AwsOidc(Box<__Arm1>),
799 CephAccessKey(Box<__Arm2>),
800 CephOidc(Box<__Arm3>),
801 GcsOidc(Box<__Arm4>),
802 GcsServiceAccountKey(Box<__Arm5>),
803 HuggingFaceToken(Box<__Arm6>),
804 MinioAccessKey(Box<__Arm7>),
805 R2AccessKey(Box<__Arm8>),
806 RustfsAccessKey(Box<__Arm9>),
807 S3LikeAccessKey(Box<__Arm10>),
808 }
809 Ok(match __Known::deserialize(deserializer)? {
810 __Known::AwsAccessKey(arm) => Self::AwsAccessKey(arm.value.0),
811 __Known::AwsOidc(arm) => Self::AwsOidc(arm.value.0),
812 __Known::CephAccessKey(arm) => Self::CephAccessKey(arm.value.0),
813 __Known::CephOidc(arm) => Self::CephOidc(arm.value.0),
814 __Known::GcsOidc(arm) => Self::GcsOidc(arm.value.0),
815 __Known::GcsServiceAccountKey(arm) => Self::GcsServiceAccountKey(arm.value.0),
816 __Known::HuggingFaceToken(arm) => Self::HuggingFaceToken(arm.value.0),
817 __Known::MinioAccessKey(arm) => Self::MinioAccessKey(arm.value.0),
818 __Known::R2AccessKey(arm) => Self::R2AccessKey(arm.value.0),
819 __Known::RustfsAccessKey(arm) => Self::RustfsAccessKey(arm.value.0),
820 __Known::S3LikeAccessKey(arm) => Self::S3LikeAccessKey(arm.value.0),
821 })
822 }
823}
824
825#[derive(Clone, Debug, PartialEq, Eq)]
827pub enum CredentialConfig {
828 AwsAccessKey(AwsAccessKeyConfig),
830 AwsOidc(AwsOidcConfig),
832 CephAccessKey(CephAccessKeyConfig),
834 CephOidc(CephOidcConfig),
836 GcsOidc(GcsOidcConfig),
838 GcsServiceAccountKey(GcsServiceAccountKeyConfig),
840 HuggingFaceToken(HuggingFaceCredentialConfig),
842 MinioAccessKey(S3AccessKeyConfig),
844 R2AccessKey(R2AccessKeyConfig),
846 RustfsAccessKey(S3AccessKeyConfig),
848 S3LikeAccessKey(S3AccessKeyConfig),
850 Unknown { tag: String, value: Value },
852}
853impl Serialize for CredentialConfig {
854 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
855 match self {
856 Self::AwsAccessKey(value) => {
857 let mut object = serde_json::Map::new();
858 object.insert("type".into(), Value::String("awsAccessKey".into()));
859 object.insert(
860 "awsAccessKey".into(),
861 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
862 );
863 Value::Object(object).serialize(serializer)
864 }
865 Self::AwsOidc(value) => {
866 let mut object = serde_json::Map::new();
867 object.insert("type".into(), Value::String("awsOidc".into()));
868 object.insert(
869 "awsOidc".into(),
870 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
871 );
872 Value::Object(object).serialize(serializer)
873 }
874 Self::CephAccessKey(value) => {
875 let mut object = serde_json::Map::new();
876 object.insert("type".into(), Value::String("cephAccessKey".into()));
877 object.insert(
878 "cephAccessKey".into(),
879 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
880 );
881 Value::Object(object).serialize(serializer)
882 }
883 Self::CephOidc(value) => {
884 let mut object = serde_json::Map::new();
885 object.insert("type".into(), Value::String("cephOidc".into()));
886 object.insert(
887 "cephOidc".into(),
888 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
889 );
890 Value::Object(object).serialize(serializer)
891 }
892 Self::GcsOidc(value) => {
893 let mut object = serde_json::Map::new();
894 object.insert("type".into(), Value::String("gcsOidc".into()));
895 object.insert(
896 "gcsOidc".into(),
897 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
898 );
899 Value::Object(object).serialize(serializer)
900 }
901 Self::GcsServiceAccountKey(value) => {
902 let mut object = serde_json::Map::new();
903 object.insert("type".into(), Value::String("gcsServiceAccountKey".into()));
904 object.insert(
905 "gcsServiceAccountKey".into(),
906 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
907 );
908 Value::Object(object).serialize(serializer)
909 }
910 Self::HuggingFaceToken(value) => {
911 let mut object = serde_json::Map::new();
912 object.insert("type".into(), Value::String("huggingFaceToken".into()));
913 object.insert(
914 "huggingFaceToken".into(),
915 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
916 );
917 Value::Object(object).serialize(serializer)
918 }
919 Self::MinioAccessKey(value) => {
920 let mut object = serde_json::Map::new();
921 object.insert("type".into(), Value::String("minioAccessKey".into()));
922 object.insert(
923 "minioAccessKey".into(),
924 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
925 );
926 Value::Object(object).serialize(serializer)
927 }
928 Self::R2AccessKey(value) => {
929 let mut object = serde_json::Map::new();
930 object.insert("type".into(), Value::String("r2AccessKey".into()));
931 object.insert(
932 "r2AccessKey".into(),
933 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
934 );
935 Value::Object(object).serialize(serializer)
936 }
937 Self::RustfsAccessKey(value) => {
938 let mut object = serde_json::Map::new();
939 object.insert("type".into(), Value::String("rustfsAccessKey".into()));
940 object.insert(
941 "rustfsAccessKey".into(),
942 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
943 );
944 Value::Object(object).serialize(serializer)
945 }
946 Self::S3LikeAccessKey(value) => {
947 let mut object = serde_json::Map::new();
948 object.insert("type".into(), Value::String("s3LikeAccessKey".into()));
949 object.insert(
950 "s3LikeAccessKey".into(),
951 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
952 );
953 Value::Object(object).serialize(serializer)
954 }
955 Self::Unknown { tag, value } => {
956 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
957 return Err(serde::ser::Error::custom(
958 "unknown union discriminator mismatch",
959 ));
960 }
961 value.serialize(serializer)
962 }
963 }
964 }
965}
966impl<'de> Deserialize<'de> for CredentialConfig {
967 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
968 let value = Value::deserialize(deserializer)?;
969 let tag = value
970 .get("type")
971 .and_then(Value::as_str)
972 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
973 match tag {
974 "awsAccessKey" => Ok(Self::AwsAccessKey(
975 serde_json::from_value(
976 value
977 .get("awsAccessKey")
978 .cloned()
979 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
980 )
981 .map_err(serde::de::Error::custom)?,
982 )),
983 "awsOidc" => Ok(Self::AwsOidc(
984 serde_json::from_value(
985 value
986 .get("awsOidc")
987 .cloned()
988 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
989 )
990 .map_err(serde::de::Error::custom)?,
991 )),
992 "cephAccessKey" => Ok(Self::CephAccessKey(
993 serde_json::from_value(
994 value
995 .get("cephAccessKey")
996 .cloned()
997 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
998 )
999 .map_err(serde::de::Error::custom)?,
1000 )),
1001 "cephOidc" => Ok(Self::CephOidc(
1002 serde_json::from_value(
1003 value
1004 .get("cephOidc")
1005 .cloned()
1006 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1007 )
1008 .map_err(serde::de::Error::custom)?,
1009 )),
1010 "gcsOidc" => Ok(Self::GcsOidc(
1011 serde_json::from_value(
1012 value
1013 .get("gcsOidc")
1014 .cloned()
1015 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1016 )
1017 .map_err(serde::de::Error::custom)?,
1018 )),
1019 "gcsServiceAccountKey" => Ok(Self::GcsServiceAccountKey(
1020 serde_json::from_value(
1021 value
1022 .get("gcsServiceAccountKey")
1023 .cloned()
1024 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1025 )
1026 .map_err(serde::de::Error::custom)?,
1027 )),
1028 "huggingFaceToken" => Ok(Self::HuggingFaceToken(
1029 serde_json::from_value(
1030 value
1031 .get("huggingFaceToken")
1032 .cloned()
1033 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1034 )
1035 .map_err(serde::de::Error::custom)?,
1036 )),
1037 "minioAccessKey" => Ok(Self::MinioAccessKey(
1038 serde_json::from_value(
1039 value
1040 .get("minioAccessKey")
1041 .cloned()
1042 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1043 )
1044 .map_err(serde::de::Error::custom)?,
1045 )),
1046 "r2AccessKey" => Ok(Self::R2AccessKey(
1047 serde_json::from_value(
1048 value
1049 .get("r2AccessKey")
1050 .cloned()
1051 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1052 )
1053 .map_err(serde::de::Error::custom)?,
1054 )),
1055 "rustfsAccessKey" => Ok(Self::RustfsAccessKey(
1056 serde_json::from_value(
1057 value
1058 .get("rustfsAccessKey")
1059 .cloned()
1060 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1061 )
1062 .map_err(serde::de::Error::custom)?,
1063 )),
1064 "s3LikeAccessKey" => Ok(Self::S3LikeAccessKey(
1065 serde_json::from_value(
1066 value
1067 .get("s3LikeAccessKey")
1068 .cloned()
1069 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1070 )
1071 .map_err(serde::de::Error::custom)?,
1072 )),
1073 tag => Ok(Self::Unknown {
1074 tag: tag.to_owned(),
1075 value,
1076 }),
1077 }
1078 }
1079}
1080impl<'de> DeserializeStrict<'de> for CredentialConfig {
1081 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1082 #[derive(Deserialize)]
1083 enum __Tag0 {
1084 #[serde(rename = "awsAccessKey")]
1085 Value,
1086 }
1087 #[derive(Deserialize)]
1088 #[serde(deny_unknown_fields)]
1089 struct __Arm0 {
1090 #[serde(rename = "type")]
1091 _tag: __Tag0,
1092 #[serde(rename = "awsAccessKey")]
1093 value: Strict<AwsAccessKeyConfig>,
1094 }
1095 #[derive(Deserialize)]
1096 enum __Tag1 {
1097 #[serde(rename = "awsOidc")]
1098 Value,
1099 }
1100 #[derive(Deserialize)]
1101 #[serde(deny_unknown_fields)]
1102 struct __Arm1 {
1103 #[serde(rename = "type")]
1104 _tag: __Tag1,
1105 #[serde(rename = "awsOidc")]
1106 value: Strict<AwsOidcConfig>,
1107 }
1108 #[derive(Deserialize)]
1109 enum __Tag2 {
1110 #[serde(rename = "cephAccessKey")]
1111 Value,
1112 }
1113 #[derive(Deserialize)]
1114 #[serde(deny_unknown_fields)]
1115 struct __Arm2 {
1116 #[serde(rename = "type")]
1117 _tag: __Tag2,
1118 #[serde(rename = "cephAccessKey")]
1119 value: Strict<CephAccessKeyConfig>,
1120 }
1121 #[derive(Deserialize)]
1122 enum __Tag3 {
1123 #[serde(rename = "cephOidc")]
1124 Value,
1125 }
1126 #[derive(Deserialize)]
1127 #[serde(deny_unknown_fields)]
1128 struct __Arm3 {
1129 #[serde(rename = "type")]
1130 _tag: __Tag3,
1131 #[serde(rename = "cephOidc")]
1132 value: Strict<CephOidcConfig>,
1133 }
1134 #[derive(Deserialize)]
1135 enum __Tag4 {
1136 #[serde(rename = "gcsOidc")]
1137 Value,
1138 }
1139 #[derive(Deserialize)]
1140 #[serde(deny_unknown_fields)]
1141 struct __Arm4 {
1142 #[serde(rename = "type")]
1143 _tag: __Tag4,
1144 #[serde(rename = "gcsOidc")]
1145 value: Strict<GcsOidcConfig>,
1146 }
1147 #[derive(Deserialize)]
1148 enum __Tag5 {
1149 #[serde(rename = "gcsServiceAccountKey")]
1150 Value,
1151 }
1152 #[derive(Deserialize)]
1153 #[serde(deny_unknown_fields)]
1154 struct __Arm5 {
1155 #[serde(rename = "type")]
1156 _tag: __Tag5,
1157 #[serde(rename = "gcsServiceAccountKey")]
1158 value: Strict<GcsServiceAccountKeyConfig>,
1159 }
1160 #[derive(Deserialize)]
1161 enum __Tag6 {
1162 #[serde(rename = "huggingFaceToken")]
1163 Value,
1164 }
1165 #[derive(Deserialize)]
1166 #[serde(deny_unknown_fields)]
1167 struct __Arm6 {
1168 #[serde(rename = "type")]
1169 _tag: __Tag6,
1170 #[serde(rename = "huggingFaceToken")]
1171 value: Strict<HuggingFaceCredentialConfig>,
1172 }
1173 #[derive(Deserialize)]
1174 enum __Tag7 {
1175 #[serde(rename = "minioAccessKey")]
1176 Value,
1177 }
1178 #[derive(Deserialize)]
1179 #[serde(deny_unknown_fields)]
1180 struct __Arm7 {
1181 #[serde(rename = "type")]
1182 _tag: __Tag7,
1183 #[serde(rename = "minioAccessKey")]
1184 value: Strict<S3AccessKeyConfig>,
1185 }
1186 #[derive(Deserialize)]
1187 enum __Tag8 {
1188 #[serde(rename = "r2AccessKey")]
1189 Value,
1190 }
1191 #[derive(Deserialize)]
1192 #[serde(deny_unknown_fields)]
1193 struct __Arm8 {
1194 #[serde(rename = "type")]
1195 _tag: __Tag8,
1196 #[serde(rename = "r2AccessKey")]
1197 value: Strict<R2AccessKeyConfig>,
1198 }
1199 #[derive(Deserialize)]
1200 enum __Tag9 {
1201 #[serde(rename = "rustfsAccessKey")]
1202 Value,
1203 }
1204 #[derive(Deserialize)]
1205 #[serde(deny_unknown_fields)]
1206 struct __Arm9 {
1207 #[serde(rename = "type")]
1208 _tag: __Tag9,
1209 #[serde(rename = "rustfsAccessKey")]
1210 value: Strict<S3AccessKeyConfig>,
1211 }
1212 #[derive(Deserialize)]
1213 enum __Tag10 {
1214 #[serde(rename = "s3LikeAccessKey")]
1215 Value,
1216 }
1217 #[derive(Deserialize)]
1218 #[serde(deny_unknown_fields)]
1219 struct __Arm10 {
1220 #[serde(rename = "type")]
1221 _tag: __Tag10,
1222 #[serde(rename = "s3LikeAccessKey")]
1223 value: Strict<S3AccessKeyConfig>,
1224 }
1225 #[derive(Deserialize)]
1226 #[serde(untagged)]
1227 enum __Known {
1228 AwsAccessKey(Box<__Arm0>),
1229 AwsOidc(Box<__Arm1>),
1230 CephAccessKey(Box<__Arm2>),
1231 CephOidc(Box<__Arm3>),
1232 GcsOidc(Box<__Arm4>),
1233 GcsServiceAccountKey(Box<__Arm5>),
1234 HuggingFaceToken(Box<__Arm6>),
1235 MinioAccessKey(Box<__Arm7>),
1236 R2AccessKey(Box<__Arm8>),
1237 RustfsAccessKey(Box<__Arm9>),
1238 S3LikeAccessKey(Box<__Arm10>),
1239 }
1240 Ok(match __Known::deserialize(deserializer)? {
1241 __Known::AwsAccessKey(arm) => Self::AwsAccessKey(arm.value.0),
1242 __Known::AwsOidc(arm) => Self::AwsOidc(arm.value.0),
1243 __Known::CephAccessKey(arm) => Self::CephAccessKey(arm.value.0),
1244 __Known::CephOidc(arm) => Self::CephOidc(arm.value.0),
1245 __Known::GcsOidc(arm) => Self::GcsOidc(arm.value.0),
1246 __Known::GcsServiceAccountKey(arm) => Self::GcsServiceAccountKey(arm.value.0),
1247 __Known::HuggingFaceToken(arm) => Self::HuggingFaceToken(arm.value.0),
1248 __Known::MinioAccessKey(arm) => Self::MinioAccessKey(arm.value.0),
1249 __Known::R2AccessKey(arm) => Self::R2AccessKey(arm.value.0),
1250 __Known::RustfsAccessKey(arm) => Self::RustfsAccessKey(arm.value.0),
1251 __Known::S3LikeAccessKey(arm) => Self::S3LikeAccessKey(arm.value.0),
1252 })
1253 }
1254}
1255
1256#[derive(Clone, Debug, PartialEq, Eq)]
1258pub enum FileSystem {
1259 Builtin(BuiltinFileSystem),
1261 Gcs(GcsFileSystem),
1263 R2(R2FileSystem),
1265 S3(S3FileSystem),
1267 S3Like(S3LikeFileSystem),
1269 Upstream(UpstreamFileSystem),
1271 Unknown { tag: String, value: Value },
1273}
1274impl Serialize for FileSystem {
1275 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1276 match self {
1277 Self::Builtin(value) => {
1278 let mut object = serde_json::Map::new();
1279 object.insert("type".into(), Value::String("builtin".into()));
1280 object.insert(
1281 "builtin".into(),
1282 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1283 );
1284 Value::Object(object).serialize(serializer)
1285 }
1286 Self::Gcs(value) => {
1287 let mut object = serde_json::Map::new();
1288 object.insert("type".into(), Value::String("gcs".into()));
1289 object.insert(
1290 "gcs".into(),
1291 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1292 );
1293 Value::Object(object).serialize(serializer)
1294 }
1295 Self::R2(value) => {
1296 let mut object = serde_json::Map::new();
1297 object.insert("type".into(), Value::String("r2".into()));
1298 object.insert(
1299 "r2".into(),
1300 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1301 );
1302 Value::Object(object).serialize(serializer)
1303 }
1304 Self::S3(value) => {
1305 let mut object = serde_json::Map::new();
1306 object.insert("type".into(), Value::String("s3".into()));
1307 object.insert(
1308 "s3".into(),
1309 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1310 );
1311 Value::Object(object).serialize(serializer)
1312 }
1313 Self::S3Like(value) => {
1314 let mut object = serde_json::Map::new();
1315 object.insert("type".into(), Value::String("s3Like".into()));
1316 object.insert(
1317 "s3Like".into(),
1318 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1319 );
1320 Value::Object(object).serialize(serializer)
1321 }
1322 Self::Upstream(value) => {
1323 let mut object = serde_json::Map::new();
1324 object.insert("type".into(), Value::String("upstream".into()));
1325 object.insert(
1326 "upstream".into(),
1327 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
1328 );
1329 Value::Object(object).serialize(serializer)
1330 }
1331 Self::Unknown { tag, value } => {
1332 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
1333 return Err(serde::ser::Error::custom(
1334 "unknown union discriminator mismatch",
1335 ));
1336 }
1337 value.serialize(serializer)
1338 }
1339 }
1340 }
1341}
1342impl<'de> Deserialize<'de> for FileSystem {
1343 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1344 let value = Value::deserialize(deserializer)?;
1345 let tag = value
1346 .get("type")
1347 .and_then(Value::as_str)
1348 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
1349 match tag {
1350 "builtin" => Ok(Self::Builtin(
1351 serde_json::from_value(
1352 value
1353 .get("builtin")
1354 .cloned()
1355 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1356 )
1357 .map_err(serde::de::Error::custom)?,
1358 )),
1359 "gcs" => Ok(Self::Gcs(
1360 serde_json::from_value(
1361 value
1362 .get("gcs")
1363 .cloned()
1364 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1365 )
1366 .map_err(serde::de::Error::custom)?,
1367 )),
1368 "r2" => Ok(Self::R2(
1369 serde_json::from_value(
1370 value
1371 .get("r2")
1372 .cloned()
1373 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1374 )
1375 .map_err(serde::de::Error::custom)?,
1376 )),
1377 "s3" => Ok(Self::S3(
1378 serde_json::from_value(
1379 value
1380 .get("s3")
1381 .cloned()
1382 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1383 )
1384 .map_err(serde::de::Error::custom)?,
1385 )),
1386 "s3Like" => Ok(Self::S3Like(
1387 serde_json::from_value(
1388 value
1389 .get("s3Like")
1390 .cloned()
1391 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1392 )
1393 .map_err(serde::de::Error::custom)?,
1394 )),
1395 "upstream" => Ok(Self::Upstream(
1396 serde_json::from_value(
1397 value
1398 .get("upstream")
1399 .cloned()
1400 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
1401 )
1402 .map_err(serde::de::Error::custom)?,
1403 )),
1404 tag => Ok(Self::Unknown {
1405 tag: tag.to_owned(),
1406 value,
1407 }),
1408 }
1409 }
1410}
1411impl<'de> DeserializeStrict<'de> for FileSystem {
1412 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1413 #[derive(Deserialize)]
1414 enum __Tag0 {
1415 #[serde(rename = "builtin")]
1416 Value,
1417 }
1418 #[derive(Deserialize)]
1419 #[serde(deny_unknown_fields)]
1420 struct __Arm0 {
1421 #[serde(rename = "type")]
1422 _tag: __Tag0,
1423 #[serde(rename = "builtin")]
1424 value: Strict<BuiltinFileSystem>,
1425 }
1426 #[derive(Deserialize)]
1427 enum __Tag1 {
1428 #[serde(rename = "gcs")]
1429 Value,
1430 }
1431 #[derive(Deserialize)]
1432 #[serde(deny_unknown_fields)]
1433 struct __Arm1 {
1434 #[serde(rename = "type")]
1435 _tag: __Tag1,
1436 #[serde(rename = "gcs")]
1437 value: Strict<GcsFileSystem>,
1438 }
1439 #[derive(Deserialize)]
1440 enum __Tag2 {
1441 #[serde(rename = "r2")]
1442 Value,
1443 }
1444 #[derive(Deserialize)]
1445 #[serde(deny_unknown_fields)]
1446 struct __Arm2 {
1447 #[serde(rename = "type")]
1448 _tag: __Tag2,
1449 #[serde(rename = "r2")]
1450 value: Strict<R2FileSystem>,
1451 }
1452 #[derive(Deserialize)]
1453 enum __Tag3 {
1454 #[serde(rename = "s3")]
1455 Value,
1456 }
1457 #[derive(Deserialize)]
1458 #[serde(deny_unknown_fields)]
1459 struct __Arm3 {
1460 #[serde(rename = "type")]
1461 _tag: __Tag3,
1462 #[serde(rename = "s3")]
1463 value: Strict<S3FileSystem>,
1464 }
1465 #[derive(Deserialize)]
1466 enum __Tag4 {
1467 #[serde(rename = "s3Like")]
1468 Value,
1469 }
1470 #[derive(Deserialize)]
1471 #[serde(deny_unknown_fields)]
1472 struct __Arm4 {
1473 #[serde(rename = "type")]
1474 _tag: __Tag4,
1475 #[serde(rename = "s3Like")]
1476 value: Strict<S3LikeFileSystem>,
1477 }
1478 #[derive(Deserialize)]
1479 enum __Tag5 {
1480 #[serde(rename = "upstream")]
1481 Value,
1482 }
1483 #[derive(Deserialize)]
1484 #[serde(deny_unknown_fields)]
1485 struct __Arm5 {
1486 #[serde(rename = "type")]
1487 _tag: __Tag5,
1488 #[serde(rename = "upstream")]
1489 value: Strict<UpstreamFileSystem>,
1490 }
1491 #[derive(Deserialize)]
1492 #[serde(untagged)]
1493 enum __Known {
1494 Builtin(Box<__Arm0>),
1495 Gcs(Box<__Arm1>),
1496 R2(Box<__Arm2>),
1497 S3(Box<__Arm3>),
1498 S3Like(Box<__Arm4>),
1499 Upstream(Box<__Arm5>),
1500 }
1501 Ok(match __Known::deserialize(deserializer)? {
1502 __Known::Builtin(arm) => Self::Builtin(arm.value.0),
1503 __Known::Gcs(arm) => Self::Gcs(arm.value.0),
1504 __Known::R2(arm) => Self::R2(arm.value.0),
1505 __Known::S3(arm) => Self::S3(arm.value.0),
1506 __Known::S3Like(arm) => Self::S3Like(arm.value.0),
1507 __Known::Upstream(arm) => Self::Upstream(arm.value.0),
1508 })
1509 }
1510}
1511
1512#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1514pub struct FileSystemWithId {
1515 #[serde(rename = "fileSystem")]
1517 pub file_system: FileSystem,
1518 #[serde(rename = "id")]
1520 pub id: String,
1521}
1522impl<'de> DeserializeStrict<'de> for FileSystemWithId {
1523 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1524 #[derive(Deserialize)]
1525 #[serde(deny_unknown_fields)]
1526 struct __Wire {
1527 #[serde(rename = "fileSystem")]
1528 file_system: Strict<FileSystem>,
1529 #[serde(rename = "id")]
1530 id: Strict<String>,
1531 }
1532 let wire = __Wire::deserialize(deserializer)?;
1533 Ok(Self {
1534 file_system: wire.file_system.0,
1535 id: wire.id.0,
1536 })
1537 }
1538}
1539
1540#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1542pub struct GcsFileSystem {
1543 #[serde(rename = "bucket")]
1545 pub bucket: String,
1546 #[serde(rename = "directory")]
1548 pub directory: String,
1549 #[serde(rename = "region")]
1551 pub region: String,
1552}
1553impl<'de> DeserializeStrict<'de> for GcsFileSystem {
1554 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1555 #[derive(Deserialize)]
1556 #[serde(deny_unknown_fields)]
1557 struct __Wire {
1558 #[serde(rename = "bucket")]
1559 bucket: Strict<String>,
1560 #[serde(rename = "directory")]
1561 directory: Strict<String>,
1562 #[serde(rename = "region")]
1563 region: Strict<String>,
1564 }
1565 let wire = __Wire::deserialize(deserializer)?;
1566 Ok(Self {
1567 bucket: wire.bucket.0,
1568 directory: wire.directory.0,
1569 region: wire.region.0,
1570 })
1571 }
1572}
1573
1574#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1576pub struct GcsOidc {
1577 #[serde(rename = "serviceAccount")]
1579 pub service_account: String,
1580 #[serde(rename = "workloadIdentityProvider")]
1582 pub workload_identity_provider: String,
1583}
1584impl<'de> DeserializeStrict<'de> for GcsOidc {
1585 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1586 #[derive(Deserialize)]
1587 #[serde(deny_unknown_fields)]
1588 struct __Wire {
1589 #[serde(rename = "serviceAccount")]
1590 service_account: Strict<String>,
1591 #[serde(rename = "workloadIdentityProvider")]
1592 workload_identity_provider: Strict<String>,
1593 }
1594 let wire = __Wire::deserialize(deserializer)?;
1595 Ok(Self {
1596 service_account: wire.service_account.0,
1597 workload_identity_provider: wire.workload_identity_provider.0,
1598 })
1599 }
1600}
1601
1602#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1604pub struct GcsOidcConfig {
1605 #[serde(rename = "serviceAccount")]
1607 pub service_account: String,
1608 #[serde(rename = "workloadIdentityProvider")]
1610 pub workload_identity_provider: String,
1611}
1612impl<'de> DeserializeStrict<'de> for GcsOidcConfig {
1613 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1614 #[derive(Deserialize)]
1615 #[serde(deny_unknown_fields)]
1616 struct __Wire {
1617 #[serde(rename = "serviceAccount")]
1618 service_account: Strict<String>,
1619 #[serde(rename = "workloadIdentityProvider")]
1620 workload_identity_provider: Strict<String>,
1621 }
1622 let wire = __Wire::deserialize(deserializer)?;
1623 Ok(Self {
1624 service_account: wire.service_account.0,
1625 workload_identity_provider: wire.workload_identity_provider.0,
1626 })
1627 }
1628}
1629
1630#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1632pub struct GcsServiceAccountKey {
1633 #[serde(rename = "keyJson")]
1635 pub key_json: SecretToken,
1636}
1637impl<'de> DeserializeStrict<'de> for GcsServiceAccountKey {
1638 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1639 #[derive(Deserialize)]
1640 #[serde(deny_unknown_fields)]
1641 struct __Wire {
1642 #[serde(rename = "keyJson")]
1643 key_json: Strict<SecretToken>,
1644 }
1645 let wire = __Wire::deserialize(deserializer)?;
1646 Ok(Self {
1647 key_json: wire.key_json.0,
1648 })
1649 }
1650}
1651
1652#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1654pub struct GcsServiceAccountKeyConfig {
1655 #[serde(rename = "privateKeyId")]
1657 pub private_key_id: String,
1658 #[serde(rename = "serviceAccount")]
1660 pub service_account: String,
1661}
1662impl<'de> DeserializeStrict<'de> for GcsServiceAccountKeyConfig {
1663 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1664 #[derive(Deserialize)]
1665 #[serde(deny_unknown_fields)]
1666 struct __Wire {
1667 #[serde(rename = "privateKeyId")]
1668 private_key_id: Strict<String>,
1669 #[serde(rename = "serviceAccount")]
1670 service_account: Strict<String>,
1671 }
1672 let wire = __Wire::deserialize(deserializer)?;
1673 Ok(Self {
1674 private_key_id: wire.private_key_id.0,
1675 service_account: wire.service_account.0,
1676 })
1677 }
1678}
1679
1680#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1682pub struct GetMountAndFileSystemResponse {
1683 #[serde(rename = "fileSystem")]
1685 pub file_system: FileSystemWithId,
1686 #[serde(rename = "fsLoc")]
1688 pub fs_loc: String,
1689 #[serde(rename = "mount")]
1691 pub mount: Mount,
1692}
1693impl<'de> DeserializeStrict<'de> for GetMountAndFileSystemResponse {
1694 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1695 #[derive(Deserialize)]
1696 #[serde(deny_unknown_fields)]
1697 struct __Wire {
1698 #[serde(rename = "fileSystem")]
1699 file_system: Strict<FileSystemWithId>,
1700 #[serde(rename = "fsLoc")]
1701 fs_loc: Strict<String>,
1702 #[serde(rename = "mount")]
1703 mount: Strict<Mount>,
1704 }
1705 let wire = __Wire::deserialize(deserializer)?;
1706 Ok(Self {
1707 file_system: wire.file_system.0,
1708 fs_loc: wire.fs_loc.0,
1709 mount: wire.mount.0,
1710 })
1711 }
1712}
1713
1714#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1716pub struct GlobalMountsRequest {
1717 #[serde(rename = "fsLoc")]
1719 pub fs_loc: String,
1720 #[serde(rename = "pageSize")]
1722 #[serde(default, skip_serializing_if = "Option::is_none")]
1723 pub page_size: Option<u32>,
1724 #[serde(rename = "pageToken")]
1726 #[serde(default, skip_serializing_if = "Option::is_none")]
1727 pub page_token: Option<String>,
1728 #[serde(rename = "principal")]
1730 pub principal: String,
1731 #[serde(rename = "projectId")]
1733 #[serde(default, skip_serializing_if = "Option::is_none")]
1734 pub project_id: Option<String>,
1735}
1736impl<'de> DeserializeStrict<'de> for GlobalMountsRequest {
1737 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1738 #[derive(Deserialize)]
1739 #[serde(deny_unknown_fields)]
1740 struct __Wire {
1741 #[serde(rename = "fsLoc")]
1742 fs_loc: Strict<String>,
1743 #[serde(rename = "pageSize")]
1744 #[serde(default)]
1745 page_size: Strict<Option<u32>>,
1746 #[serde(rename = "pageToken")]
1747 #[serde(default)]
1748 page_token: Strict<Option<String>>,
1749 #[serde(rename = "principal")]
1750 principal: Strict<String>,
1751 #[serde(rename = "projectId")]
1752 #[serde(default)]
1753 project_id: Strict<Option<String>>,
1754 }
1755 let wire = __Wire::deserialize(deserializer)?;
1756 Ok(Self {
1757 fs_loc: wire.fs_loc.0,
1758 page_size: wire.page_size.0,
1759 page_token: wire.page_token.0,
1760 principal: wire.principal.0,
1761 project_id: wire.project_id.0,
1762 })
1763 }
1764}
1765
1766#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1768pub struct HuggingFaceCredential {
1769 #[serde(rename = "endpoint")]
1771 #[serde(default, skip_serializing_if = "Option::is_none")]
1772 pub endpoint: Option<String>,
1773 #[serde(rename = "token")]
1775 pub token: SecretToken,
1776}
1777impl<'de> DeserializeStrict<'de> for HuggingFaceCredential {
1778 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1779 #[derive(Deserialize)]
1780 #[serde(deny_unknown_fields)]
1781 struct __Wire {
1782 #[serde(rename = "endpoint")]
1783 #[serde(default)]
1784 endpoint: Strict<Option<String>>,
1785 #[serde(rename = "token")]
1786 token: Strict<SecretToken>,
1787 }
1788 let wire = __Wire::deserialize(deserializer)?;
1789 Ok(Self {
1790 endpoint: wire.endpoint.0,
1791 token: wire.token.0,
1792 })
1793 }
1794}
1795
1796#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1798pub struct HuggingFaceCredentialConfig {
1799 #[serde(rename = "endpoint")]
1801 #[serde(default, skip_serializing_if = "Option::is_none")]
1802 pub endpoint: Option<String>,
1803}
1804impl<'de> DeserializeStrict<'de> for HuggingFaceCredentialConfig {
1805 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1806 #[derive(Deserialize)]
1807 #[serde(deny_unknown_fields)]
1808 struct __Wire {
1809 #[serde(rename = "endpoint")]
1810 #[serde(default)]
1811 endpoint: Strict<Option<String>>,
1812 }
1813 let wire = __Wire::deserialize(deserializer)?;
1814 Ok(Self {
1815 endpoint: wire.endpoint.0,
1816 })
1817 }
1818}
1819
1820#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1822pub struct IssueMountTokenRequest {
1823 #[serde(rename = "mode")]
1825 pub mode: MountMode,
1826 #[serde(rename = "path")]
1828 pub path: String,
1829}
1830impl<'de> DeserializeStrict<'de> for IssueMountTokenRequest {
1831 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1832 #[derive(Deserialize)]
1833 #[serde(deny_unknown_fields)]
1834 struct __Wire {
1835 #[serde(rename = "mode")]
1836 mode: Strict<MountMode>,
1837 #[serde(rename = "path")]
1838 path: Strict<String>,
1839 }
1840 let wire = __Wire::deserialize(deserializer)?;
1841 Ok(Self {
1842 mode: wire.mode.0,
1843 path: wire.path.0,
1844 })
1845 }
1846}
1847
1848#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1850pub struct IssueMountTokenResponse {
1851 #[serde(rename = "token")]
1853 pub token: SecretToken,
1854}
1855impl<'de> DeserializeStrict<'de> for IssueMountTokenResponse {
1856 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1857 #[derive(Deserialize)]
1858 #[serde(deny_unknown_fields)]
1859 struct __Wire {
1860 #[serde(rename = "token")]
1861 token: Strict<SecretToken>,
1862 }
1863 let wire = __Wire::deserialize(deserializer)?;
1864 Ok(Self {
1865 token: wire.token.0,
1866 })
1867 }
1868}
1869
1870#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1872pub struct Mount {
1873 #[serde(rename = "alias")]
1875 pub alias: Uuid,
1876 #[serde(rename = "belongsTo")]
1878 #[serde(default, skip_serializing_if = "Option::is_none")]
1879 pub belongs_to: Option<String>,
1880 #[serde(rename = "directory")]
1882 pub directory: String,
1883 #[serde(rename = "fileSystemId")]
1885 #[serde(default, skip_serializing_if = "Option::is_none")]
1886 pub file_system_id: Option<String>,
1887 #[serde(rename = "id")]
1889 pub id: String,
1890 #[serde(rename = "mode")]
1892 pub mode: MountMode,
1893 #[serde(rename = "principal")]
1895 pub principal: String,
1896 #[serde(rename = "projectId")]
1898 pub project_id: String,
1899}
1900impl<'de> DeserializeStrict<'de> for Mount {
1901 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1902 #[derive(Deserialize)]
1903 #[serde(deny_unknown_fields)]
1904 struct __Wire {
1905 #[serde(rename = "alias")]
1906 alias: Strict<Uuid>,
1907 #[serde(rename = "belongsTo")]
1908 #[serde(default)]
1909 belongs_to: Strict<Option<String>>,
1910 #[serde(rename = "directory")]
1911 directory: Strict<String>,
1912 #[serde(rename = "fileSystemId")]
1913 #[serde(default)]
1914 file_system_id: Strict<Option<String>>,
1915 #[serde(rename = "id")]
1916 id: Strict<String>,
1917 #[serde(rename = "mode")]
1918 mode: Strict<MountMode>,
1919 #[serde(rename = "principal")]
1920 principal: Strict<String>,
1921 #[serde(rename = "projectId")]
1922 project_id: Strict<String>,
1923 }
1924 let wire = __Wire::deserialize(deserializer)?;
1925 Ok(Self {
1926 alias: wire.alias.0,
1927 belongs_to: wire.belongs_to.0,
1928 directory: wire.directory.0,
1929 file_system_id: wire.file_system_id.0,
1930 id: wire.id.0,
1931 mode: wire.mode.0,
1932 principal: wire.principal.0,
1933 project_id: wire.project_id.0,
1934 })
1935 }
1936}
1937
1938#[derive(Clone, Debug, PartialEq, Eq)]
1940pub enum MountMode {
1941 Ro,
1943 Rw,
1945 Unknown(String),
1947}
1948impl Serialize for MountMode {
1949 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1950 serializer.serialize_str(match self {
1951 Self::Ro => "ro",
1952 Self::Rw => "rw",
1953 Self::Unknown(value) => value,
1954 })
1955 }
1956}
1957impl<'de> Deserialize<'de> for MountMode {
1958 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1959 Ok(match String::deserialize(deserializer)?.as_str() {
1960 "ro" => Self::Ro,
1961 "rw" => Self::Rw,
1962 value => Self::Unknown(value.to_owned()),
1963 })
1964 }
1965}
1966impl<'de> DeserializeStrict<'de> for MountMode {
1967 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1968 #[derive(Deserialize)]
1969 enum __Known {
1970 #[serde(rename = "ro")]
1971 Ro,
1972 #[serde(rename = "rw")]
1973 Rw,
1974 }
1975 Ok(match __Known::deserialize(deserializer)? {
1976 __Known::Ro => Self::Ro,
1977 __Known::Rw => Self::Rw,
1978 })
1979 }
1980}
1981
1982#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
1984pub struct MountPage {
1985 #[serde(rename = "items")]
1987 pub items: Vec<Mount>,
1988 #[serde(rename = "nextPageToken")]
1990 #[serde(default, skip_serializing_if = "Option::is_none")]
1991 pub next_page_token: Option<String>,
1992}
1993impl<'de> DeserializeStrict<'de> for MountPage {
1994 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1995 #[derive(Deserialize)]
1996 #[serde(deny_unknown_fields)]
1997 struct __Wire {
1998 #[serde(rename = "items")]
1999 items: Strict<Vec<Mount>>,
2000 #[serde(rename = "nextPageToken")]
2001 #[serde(default)]
2002 next_page_token: Strict<Option<String>>,
2003 }
2004 let wire = __Wire::deserialize(deserializer)?;
2005 Ok(Self {
2006 items: wire.items.0,
2007 next_page_token: wire.next_page_token.0,
2008 })
2009 }
2010}
2011
2012#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2014pub struct PageRequest {
2015 #[serde(rename = "pageSize")]
2017 #[serde(default, skip_serializing_if = "Option::is_none")]
2018 pub page_size: Option<u32>,
2019 #[serde(rename = "pageToken")]
2021 #[serde(default, skip_serializing_if = "Option::is_none")]
2022 pub page_token: Option<String>,
2023}
2024impl<'de> DeserializeStrict<'de> for PageRequest {
2025 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2026 #[derive(Deserialize)]
2027 #[serde(deny_unknown_fields)]
2028 struct __Wire {
2029 #[serde(rename = "pageSize")]
2030 #[serde(default)]
2031 page_size: Strict<Option<u32>>,
2032 #[serde(rename = "pageToken")]
2033 #[serde(default)]
2034 page_token: Strict<Option<String>>,
2035 }
2036 let wire = __Wire::deserialize(deserializer)?;
2037 Ok(Self {
2038 page_size: wire.page_size.0,
2039 page_token: wire.page_token.0,
2040 })
2041 }
2042}
2043
2044#[derive(Clone, Debug, PartialEq, Eq)]
2046pub enum ProjectStorage {
2047 FileSystem(ProjectStorageFileSystem),
2049 Volume(ProjectStorageVolume),
2051 Unknown { tag: String, value: Value },
2053}
2054impl Serialize for ProjectStorage {
2055 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2056 match self {
2057 Self::FileSystem(value) => {
2058 let mut object = serde_json::Map::new();
2059 object.insert("type".into(), Value::String("fileSystem".into()));
2060 object.insert(
2061 "fileSystem".into(),
2062 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2063 );
2064 Value::Object(object).serialize(serializer)
2065 }
2066 Self::Volume(value) => {
2067 let mut object = serde_json::Map::new();
2068 object.insert("type".into(), Value::String("volume".into()));
2069 object.insert(
2070 "volume".into(),
2071 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2072 );
2073 Value::Object(object).serialize(serializer)
2074 }
2075 Self::Unknown { tag, value } => {
2076 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
2077 return Err(serde::ser::Error::custom(
2078 "unknown union discriminator mismatch",
2079 ));
2080 }
2081 value.serialize(serializer)
2082 }
2083 }
2084 }
2085}
2086impl<'de> Deserialize<'de> for ProjectStorage {
2087 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2088 let value = Value::deserialize(deserializer)?;
2089 let tag = value
2090 .get("type")
2091 .and_then(Value::as_str)
2092 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
2093 match tag {
2094 "fileSystem" => Ok(Self::FileSystem(
2095 serde_json::from_value(
2096 value
2097 .get("fileSystem")
2098 .cloned()
2099 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2100 )
2101 .map_err(serde::de::Error::custom)?,
2102 )),
2103 "volume" => Ok(Self::Volume(
2104 serde_json::from_value(
2105 value
2106 .get("volume")
2107 .cloned()
2108 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2109 )
2110 .map_err(serde::de::Error::custom)?,
2111 )),
2112 tag => Ok(Self::Unknown {
2113 tag: tag.to_owned(),
2114 value,
2115 }),
2116 }
2117 }
2118}
2119impl<'de> DeserializeStrict<'de> for ProjectStorage {
2120 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2121 #[derive(Deserialize)]
2122 enum __Tag0 {
2123 #[serde(rename = "fileSystem")]
2124 Value,
2125 }
2126 #[derive(Deserialize)]
2127 #[serde(deny_unknown_fields)]
2128 struct __Arm0 {
2129 #[serde(rename = "type")]
2130 _tag: __Tag0,
2131 #[serde(rename = "fileSystem")]
2132 value: Strict<ProjectStorageFileSystem>,
2133 }
2134 #[derive(Deserialize)]
2135 enum __Tag1 {
2136 #[serde(rename = "volume")]
2137 Value,
2138 }
2139 #[derive(Deserialize)]
2140 #[serde(deny_unknown_fields)]
2141 struct __Arm1 {
2142 #[serde(rename = "type")]
2143 _tag: __Tag1,
2144 #[serde(rename = "volume")]
2145 value: Strict<ProjectStorageVolume>,
2146 }
2147 #[derive(Deserialize)]
2148 #[serde(untagged)]
2149 enum __Known {
2150 FileSystem(Box<__Arm0>),
2151 Volume(Box<__Arm1>),
2152 }
2153 Ok(match __Known::deserialize(deserializer)? {
2154 __Known::FileSystem(arm) => Self::FileSystem(arm.value.0),
2155 __Known::Volume(arm) => Self::Volume(arm.value.0),
2156 })
2157 }
2158}
2159
2160#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2162pub struct ProjectStorageFileSystem {}
2163impl<'de> DeserializeStrict<'de> for ProjectStorageFileSystem {
2164 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2165 #[derive(Deserialize)]
2166 #[serde(deny_unknown_fields)]
2167 struct __Wire {}
2168 __Wire::deserialize(deserializer)?;
2169 Ok(Self {})
2170 }
2171}
2172
2173#[derive(Clone, Debug, PartialEq, Eq)]
2175pub enum ProjectStorageView {
2176 FileSystem(ProjectStorageViewFileSystem),
2178 Volume(ProjectStorageViewVolume),
2180 Unknown { tag: String, value: Value },
2182}
2183impl Serialize for ProjectStorageView {
2184 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2185 match self {
2186 Self::FileSystem(value) => {
2187 let mut object = serde_json::Map::new();
2188 object.insert("type".into(), Value::String("fileSystem".into()));
2189 object.insert(
2190 "fileSystem".into(),
2191 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2192 );
2193 Value::Object(object).serialize(serializer)
2194 }
2195 Self::Volume(value) => {
2196 let mut object = serde_json::Map::new();
2197 object.insert("type".into(), Value::String("volume".into()));
2198 object.insert(
2199 "volume".into(),
2200 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2201 );
2202 Value::Object(object).serialize(serializer)
2203 }
2204 Self::Unknown { tag, value } => {
2205 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
2206 return Err(serde::ser::Error::custom(
2207 "unknown union discriminator mismatch",
2208 ));
2209 }
2210 value.serialize(serializer)
2211 }
2212 }
2213 }
2214}
2215impl<'de> Deserialize<'de> for ProjectStorageView {
2216 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2217 let value = Value::deserialize(deserializer)?;
2218 let tag = value
2219 .get("type")
2220 .and_then(Value::as_str)
2221 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
2222 match tag {
2223 "fileSystem" => Ok(Self::FileSystem(
2224 serde_json::from_value(
2225 value
2226 .get("fileSystem")
2227 .cloned()
2228 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2229 )
2230 .map_err(serde::de::Error::custom)?,
2231 )),
2232 "volume" => Ok(Self::Volume(
2233 serde_json::from_value(
2234 value
2235 .get("volume")
2236 .cloned()
2237 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2238 )
2239 .map_err(serde::de::Error::custom)?,
2240 )),
2241 tag => Ok(Self::Unknown {
2242 tag: tag.to_owned(),
2243 value,
2244 }),
2245 }
2246 }
2247}
2248impl<'de> DeserializeStrict<'de> for ProjectStorageView {
2249 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2250 #[derive(Deserialize)]
2251 enum __Tag0 {
2252 #[serde(rename = "fileSystem")]
2253 Value,
2254 }
2255 #[derive(Deserialize)]
2256 #[serde(deny_unknown_fields)]
2257 struct __Arm0 {
2258 #[serde(rename = "type")]
2259 _tag: __Tag0,
2260 #[serde(rename = "fileSystem")]
2261 value: Strict<ProjectStorageViewFileSystem>,
2262 }
2263 #[derive(Deserialize)]
2264 enum __Tag1 {
2265 #[serde(rename = "volume")]
2266 Value,
2267 }
2268 #[derive(Deserialize)]
2269 #[serde(deny_unknown_fields)]
2270 struct __Arm1 {
2271 #[serde(rename = "type")]
2272 _tag: __Tag1,
2273 #[serde(rename = "volume")]
2274 value: Strict<ProjectStorageViewVolume>,
2275 }
2276 #[derive(Deserialize)]
2277 #[serde(untagged)]
2278 enum __Known {
2279 FileSystem(Box<__Arm0>),
2280 Volume(Box<__Arm1>),
2281 }
2282 Ok(match __Known::deserialize(deserializer)? {
2283 __Known::FileSystem(arm) => Self::FileSystem(arm.value.0),
2284 __Known::Volume(arm) => Self::Volume(arm.value.0),
2285 })
2286 }
2287}
2288
2289#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2291pub struct ProjectStorageViewFileSystem {}
2292impl<'de> DeserializeStrict<'de> for ProjectStorageViewFileSystem {
2293 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2294 #[derive(Deserialize)]
2295 #[serde(deny_unknown_fields)]
2296 struct __Wire {}
2297 __Wire::deserialize(deserializer)?;
2298 Ok(Self {})
2299 }
2300}
2301
2302#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2304pub struct ProjectStorageViewVolume {
2305 #[serde(rename = "selected")]
2307 pub selected: bool,
2308 #[serde(rename = "volumeId")]
2310 pub volume_id: String,
2311}
2312impl<'de> DeserializeStrict<'de> for ProjectStorageViewVolume {
2313 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2314 #[derive(Deserialize)]
2315 #[serde(deny_unknown_fields)]
2316 struct __Wire {
2317 #[serde(rename = "selected")]
2318 selected: Strict<bool>,
2319 #[serde(rename = "volumeId")]
2320 volume_id: Strict<String>,
2321 }
2322 let wire = __Wire::deserialize(deserializer)?;
2323 Ok(Self {
2324 selected: wire.selected.0,
2325 volume_id: wire.volume_id.0,
2326 })
2327 }
2328}
2329
2330#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2332pub struct ProjectStorageVolume {
2333 #[serde(rename = "volumeId")]
2335 pub volume_id: String,
2336}
2337impl<'de> DeserializeStrict<'de> for ProjectStorageVolume {
2338 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2339 #[derive(Deserialize)]
2340 #[serde(deny_unknown_fields)]
2341 struct __Wire {
2342 #[serde(rename = "volumeId")]
2343 volume_id: Strict<String>,
2344 }
2345 let wire = __Wire::deserialize(deserializer)?;
2346 Ok(Self {
2347 volume_id: wire.volume_id.0,
2348 })
2349 }
2350}
2351
2352#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2354pub struct R2AccessKey {
2355 #[serde(rename = "accessKeyId")]
2357 pub access_key_id: String,
2358 #[serde(rename = "accountId")]
2360 pub account_id: String,
2361 #[serde(rename = "jurisdiction")]
2363 #[serde(default, skip_serializing_if = "Option::is_none")]
2364 pub jurisdiction: Option<R2Jurisdiction>,
2365 #[serde(rename = "secretAccessKey")]
2367 pub secret_access_key: SecretToken,
2368}
2369impl<'de> DeserializeStrict<'de> for R2AccessKey {
2370 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2371 #[derive(Deserialize)]
2372 #[serde(deny_unknown_fields)]
2373 struct __Wire {
2374 #[serde(rename = "accessKeyId")]
2375 access_key_id: Strict<String>,
2376 #[serde(rename = "accountId")]
2377 account_id: Strict<String>,
2378 #[serde(rename = "jurisdiction")]
2379 #[serde(default)]
2380 jurisdiction: Strict<Option<R2Jurisdiction>>,
2381 #[serde(rename = "secretAccessKey")]
2382 secret_access_key: Strict<SecretToken>,
2383 }
2384 let wire = __Wire::deserialize(deserializer)?;
2385 Ok(Self {
2386 access_key_id: wire.access_key_id.0,
2387 account_id: wire.account_id.0,
2388 jurisdiction: wire.jurisdiction.0,
2389 secret_access_key: wire.secret_access_key.0,
2390 })
2391 }
2392}
2393
2394#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2396pub struct R2AccessKeyConfig {
2397 #[serde(rename = "accessKeyId")]
2399 pub access_key_id: String,
2400 #[serde(rename = "accountId")]
2402 pub account_id: String,
2403 #[serde(rename = "jurisdiction")]
2405 #[serde(default, skip_serializing_if = "Option::is_none")]
2406 pub jurisdiction: Option<R2Jurisdiction>,
2407}
2408impl<'de> DeserializeStrict<'de> for R2AccessKeyConfig {
2409 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2410 #[derive(Deserialize)]
2411 #[serde(deny_unknown_fields)]
2412 struct __Wire {
2413 #[serde(rename = "accessKeyId")]
2414 access_key_id: Strict<String>,
2415 #[serde(rename = "accountId")]
2416 account_id: Strict<String>,
2417 #[serde(rename = "jurisdiction")]
2418 #[serde(default)]
2419 jurisdiction: Strict<Option<R2Jurisdiction>>,
2420 }
2421 let wire = __Wire::deserialize(deserializer)?;
2422 Ok(Self {
2423 access_key_id: wire.access_key_id.0,
2424 account_id: wire.account_id.0,
2425 jurisdiction: wire.jurisdiction.0,
2426 })
2427 }
2428}
2429
2430#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2432pub struct R2FileSystem {
2433 #[serde(rename = "accessKeyId")]
2435 pub access_key_id: String,
2436 #[serde(rename = "bucket")]
2438 pub bucket: String,
2439 #[serde(rename = "directory")]
2441 pub directory: String,
2442 #[serde(rename = "endpoint")]
2444 pub endpoint: String,
2445 #[serde(rename = "secretAccessKey")]
2447 pub secret_access_key: SecretAccessKey,
2448}
2449impl<'de> DeserializeStrict<'de> for R2FileSystem {
2450 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2451 #[derive(Deserialize)]
2452 #[serde(deny_unknown_fields)]
2453 struct __Wire {
2454 #[serde(rename = "accessKeyId")]
2455 access_key_id: Strict<String>,
2456 #[serde(rename = "bucket")]
2457 bucket: Strict<String>,
2458 #[serde(rename = "directory")]
2459 directory: Strict<String>,
2460 #[serde(rename = "endpoint")]
2461 endpoint: Strict<String>,
2462 #[serde(rename = "secretAccessKey")]
2463 secret_access_key: Strict<SecretAccessKey>,
2464 }
2465 let wire = __Wire::deserialize(deserializer)?;
2466 Ok(Self {
2467 access_key_id: wire.access_key_id.0,
2468 bucket: wire.bucket.0,
2469 directory: wire.directory.0,
2470 endpoint: wire.endpoint.0,
2471 secret_access_key: wire.secret_access_key.0,
2472 })
2473 }
2474}
2475
2476#[derive(Clone, Debug, PartialEq, Eq)]
2478pub enum R2Jurisdiction {
2479 Eu,
2481 Fedramp,
2483 Us,
2485 Unknown(String),
2487}
2488impl Serialize for R2Jurisdiction {
2489 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2490 serializer.serialize_str(match self {
2491 Self::Eu => "eu",
2492 Self::Fedramp => "fedramp",
2493 Self::Us => "us",
2494 Self::Unknown(value) => value,
2495 })
2496 }
2497}
2498impl<'de> Deserialize<'de> for R2Jurisdiction {
2499 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2500 Ok(match String::deserialize(deserializer)?.as_str() {
2501 "eu" => Self::Eu,
2502 "fedramp" => Self::Fedramp,
2503 "us" => Self::Us,
2504 value => Self::Unknown(value.to_owned()),
2505 })
2506 }
2507}
2508impl<'de> DeserializeStrict<'de> for R2Jurisdiction {
2509 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2510 #[derive(Deserialize)]
2511 enum __Known {
2512 #[serde(rename = "eu")]
2513 Eu,
2514 #[serde(rename = "fedramp")]
2515 Fedramp,
2516 #[serde(rename = "us")]
2517 Us,
2518 }
2519 Ok(match __Known::deserialize(deserializer)? {
2520 __Known::Eu => Self::Eu,
2521 __Known::Fedramp => Self::Fedramp,
2522 __Known::Us => Self::Us,
2523 })
2524 }
2525}
2526
2527#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2529pub struct RegisterVolumeRequest {
2530 #[serde(rename = "credential")]
2532 pub credential: Credential,
2533 #[serde(rename = "name")]
2535 pub name: String,
2536 #[serde(rename = "region")]
2538 #[serde(default, skip_serializing_if = "Option::is_none")]
2539 pub region: Option<String>,
2540 #[serde(rename = "uri")]
2542 pub uri: String,
2543}
2544impl<'de> DeserializeStrict<'de> for RegisterVolumeRequest {
2545 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2546 #[derive(Deserialize)]
2547 #[serde(deny_unknown_fields)]
2548 struct __Wire {
2549 #[serde(rename = "credential")]
2550 credential: Strict<Credential>,
2551 #[serde(rename = "name")]
2552 name: Strict<String>,
2553 #[serde(rename = "region")]
2554 #[serde(default)]
2555 region: Strict<Option<String>>,
2556 #[serde(rename = "uri")]
2557 uri: Strict<String>,
2558 }
2559 let wire = __Wire::deserialize(deserializer)?;
2560 Ok(Self {
2561 credential: wire.credential.0,
2562 name: wire.name.0,
2563 region: wire.region.0,
2564 uri: wire.uri.0,
2565 })
2566 }
2567}
2568
2569#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2571pub struct S3AccessKey {
2572 #[serde(rename = "accessKeyId")]
2574 pub access_key_id: String,
2575 #[serde(rename = "endpoint")]
2577 pub endpoint: String,
2578 #[serde(rename = "region")]
2580 #[serde(default, skip_serializing_if = "Option::is_none")]
2581 pub region: Option<String>,
2582 #[serde(rename = "secretAccessKey")]
2584 pub secret_access_key: SecretToken,
2585}
2586impl<'de> DeserializeStrict<'de> for S3AccessKey {
2587 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2588 #[derive(Deserialize)]
2589 #[serde(deny_unknown_fields)]
2590 struct __Wire {
2591 #[serde(rename = "accessKeyId")]
2592 access_key_id: Strict<String>,
2593 #[serde(rename = "endpoint")]
2594 endpoint: Strict<String>,
2595 #[serde(rename = "region")]
2596 #[serde(default)]
2597 region: Strict<Option<String>>,
2598 #[serde(rename = "secretAccessKey")]
2599 secret_access_key: Strict<SecretToken>,
2600 }
2601 let wire = __Wire::deserialize(deserializer)?;
2602 Ok(Self {
2603 access_key_id: wire.access_key_id.0,
2604 endpoint: wire.endpoint.0,
2605 region: wire.region.0,
2606 secret_access_key: wire.secret_access_key.0,
2607 })
2608 }
2609}
2610
2611#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2613pub struct S3AccessKeyConfig {
2614 #[serde(rename = "accessKeyId")]
2616 pub access_key_id: String,
2617 #[serde(rename = "endpoint")]
2619 pub endpoint: String,
2620 #[serde(rename = "region")]
2622 #[serde(default, skip_serializing_if = "Option::is_none")]
2623 pub region: Option<String>,
2624}
2625impl<'de> DeserializeStrict<'de> for S3AccessKeyConfig {
2626 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2627 #[derive(Deserialize)]
2628 #[serde(deny_unknown_fields)]
2629 struct __Wire {
2630 #[serde(rename = "accessKeyId")]
2631 access_key_id: Strict<String>,
2632 #[serde(rename = "endpoint")]
2633 endpoint: Strict<String>,
2634 #[serde(rename = "region")]
2635 #[serde(default)]
2636 region: Strict<Option<String>>,
2637 }
2638 let wire = __Wire::deserialize(deserializer)?;
2639 Ok(Self {
2640 access_key_id: wire.access_key_id.0,
2641 endpoint: wire.endpoint.0,
2642 region: wire.region.0,
2643 })
2644 }
2645}
2646
2647#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2649pub struct S3FileSystem {
2650 #[serde(rename = "bucket")]
2652 pub bucket: String,
2653 #[serde(rename = "directory")]
2655 pub directory: String,
2656 #[serde(rename = "endpoint")]
2658 #[serde(default, skip_serializing_if = "Option::is_none")]
2659 pub endpoint: Option<String>,
2660 #[serde(rename = "region")]
2662 pub region: String,
2663 #[serde(rename = "roleArn")]
2665 pub role_arn: String,
2666}
2667impl<'de> DeserializeStrict<'de> for S3FileSystem {
2668 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2669 #[derive(Deserialize)]
2670 #[serde(deny_unknown_fields)]
2671 struct __Wire {
2672 #[serde(rename = "bucket")]
2673 bucket: Strict<String>,
2674 #[serde(rename = "directory")]
2675 directory: Strict<String>,
2676 #[serde(rename = "endpoint")]
2677 #[serde(default)]
2678 endpoint: Strict<Option<String>>,
2679 #[serde(rename = "region")]
2680 region: Strict<String>,
2681 #[serde(rename = "roleArn")]
2682 role_arn: Strict<String>,
2683 }
2684 let wire = __Wire::deserialize(deserializer)?;
2685 Ok(Self {
2686 bucket: wire.bucket.0,
2687 directory: wire.directory.0,
2688 endpoint: wire.endpoint.0,
2689 region: wire.region.0,
2690 role_arn: wire.role_arn.0,
2691 })
2692 }
2693}
2694
2695#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2697pub struct S3LikeFileSystem {
2698 #[serde(rename = "accessKeyId")]
2700 pub access_key_id: String,
2701 #[serde(rename = "bucket")]
2703 pub bucket: String,
2704 #[serde(rename = "directory")]
2706 pub directory: String,
2707 #[serde(rename = "endpoint")]
2709 pub endpoint: String,
2710 #[serde(rename = "region")]
2712 pub region: String,
2713 #[serde(rename = "secretAccessKey")]
2715 pub secret_access_key: SecretAccessKey,
2716}
2717impl<'de> DeserializeStrict<'de> for S3LikeFileSystem {
2718 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2719 #[derive(Deserialize)]
2720 #[serde(deny_unknown_fields)]
2721 struct __Wire {
2722 #[serde(rename = "accessKeyId")]
2723 access_key_id: Strict<String>,
2724 #[serde(rename = "bucket")]
2725 bucket: Strict<String>,
2726 #[serde(rename = "directory")]
2727 directory: Strict<String>,
2728 #[serde(rename = "endpoint")]
2729 endpoint: Strict<String>,
2730 #[serde(rename = "region")]
2731 region: Strict<String>,
2732 #[serde(rename = "secretAccessKey")]
2733 secret_access_key: Strict<SecretAccessKey>,
2734 }
2735 let wire = __Wire::deserialize(deserializer)?;
2736 Ok(Self {
2737 access_key_id: wire.access_key_id.0,
2738 bucket: wire.bucket.0,
2739 directory: wire.directory.0,
2740 endpoint: wire.endpoint.0,
2741 region: wire.region.0,
2742 secret_access_key: wire.secret_access_key.0,
2743 })
2744 }
2745}
2746
2747#[derive(Clone, Debug, PartialEq, Eq)]
2749pub enum SecretAccessKey {
2750 Secret(String),
2752 Token(SecretToken),
2754 Unknown { tag: String, value: Value },
2756}
2757impl Serialize for SecretAccessKey {
2758 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2759 match self {
2760 Self::Secret(value) => {
2761 let mut object = serde_json::Map::new();
2762 object.insert("type".into(), Value::String("secret".into()));
2763 object.insert(
2764 "secret".into(),
2765 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2766 );
2767 Value::Object(object).serialize(serializer)
2768 }
2769 Self::Token(value) => {
2770 let mut object = serde_json::Map::new();
2771 object.insert("type".into(), Value::String("token".into()));
2772 object.insert(
2773 "token".into(),
2774 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
2775 );
2776 Value::Object(object).serialize(serializer)
2777 }
2778 Self::Unknown { tag, value } => {
2779 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
2780 return Err(serde::ser::Error::custom(
2781 "unknown union discriminator mismatch",
2782 ));
2783 }
2784 value.serialize(serializer)
2785 }
2786 }
2787 }
2788}
2789impl<'de> Deserialize<'de> for SecretAccessKey {
2790 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2791 let value = Value::deserialize(deserializer)?;
2792 let tag = value
2793 .get("type")
2794 .and_then(Value::as_str)
2795 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
2796 match tag {
2797 "secret" => Ok(Self::Secret(
2798 serde_json::from_value(
2799 value
2800 .get("secret")
2801 .cloned()
2802 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2803 )
2804 .map_err(serde::de::Error::custom)?,
2805 )),
2806 "token" => Ok(Self::Token(
2807 serde_json::from_value(
2808 value
2809 .get("token")
2810 .cloned()
2811 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
2812 )
2813 .map_err(serde::de::Error::custom)?,
2814 )),
2815 tag => Ok(Self::Unknown {
2816 tag: tag.to_owned(),
2817 value,
2818 }),
2819 }
2820 }
2821}
2822impl<'de> DeserializeStrict<'de> for SecretAccessKey {
2823 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2824 #[derive(Deserialize)]
2825 enum __Tag0 {
2826 #[serde(rename = "secret")]
2827 Value,
2828 }
2829 #[derive(Deserialize)]
2830 #[serde(deny_unknown_fields)]
2831 struct __Arm0 {
2832 #[serde(rename = "type")]
2833 _tag: __Tag0,
2834 #[serde(rename = "secret")]
2835 value: Strict<String>,
2836 }
2837 #[derive(Deserialize)]
2838 enum __Tag1 {
2839 #[serde(rename = "token")]
2840 Value,
2841 }
2842 #[derive(Deserialize)]
2843 #[serde(deny_unknown_fields)]
2844 struct __Arm1 {
2845 #[serde(rename = "type")]
2846 _tag: __Tag1,
2847 #[serde(rename = "token")]
2848 value: Strict<SecretToken>,
2849 }
2850 #[derive(Deserialize)]
2851 #[serde(untagged)]
2852 enum __Known {
2853 Secret(Box<__Arm0>),
2854 Token(Box<__Arm1>),
2855 }
2856 Ok(match __Known::deserialize(deserializer)? {
2857 __Known::Secret(arm) => Self::Secret(arm.value.0),
2858 __Known::Token(arm) => Self::Token(arm.value.0),
2859 })
2860 }
2861}
2862
2863#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
2865#[serde(transparent)]
2866pub struct SecretToken(pub String);
2867impl std::fmt::Debug for SecretToken {
2868 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2869 formatter.write_str("SecretToken(<redacted>)")
2870 }
2871}
2872impl<'de> DeserializeStrict<'de> for SecretToken {
2873 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2874 Ok(Self(Strict::<String>::deserialize(deserializer)?.0))
2875 }
2876}
2877
2878#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2880pub struct TestStep {
2881 #[serde(rename = "detail")]
2883 pub detail: String,
2884 #[serde(rename = "succeeded")]
2886 pub succeeded: bool,
2887}
2888impl<'de> DeserializeStrict<'de> for TestStep {
2889 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2890 #[derive(Deserialize)]
2891 #[serde(deny_unknown_fields)]
2892 struct __Wire {
2893 #[serde(rename = "detail")]
2894 detail: Strict<String>,
2895 #[serde(rename = "succeeded")]
2896 succeeded: Strict<bool>,
2897 }
2898 let wire = __Wire::deserialize(deserializer)?;
2899 Ok(Self {
2900 detail: wire.detail.0,
2901 succeeded: wire.succeeded.0,
2902 })
2903 }
2904}
2905
2906#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2908pub struct TestVolumeResponse {
2909 #[serde(rename = "access")]
2911 #[serde(default, skip_serializing_if = "Option::is_none")]
2912 pub access: Option<TestStep>,
2913 #[serde(rename = "vend")]
2915 pub vend: TestStep,
2916 #[serde(rename = "write")]
2918 #[serde(default, skip_serializing_if = "Option::is_none")]
2919 pub write: Option<TestStep>,
2920}
2921impl<'de> DeserializeStrict<'de> for TestVolumeResponse {
2922 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2923 #[derive(Deserialize)]
2924 #[serde(deny_unknown_fields)]
2925 struct __Wire {
2926 #[serde(rename = "access")]
2927 #[serde(default)]
2928 access: Strict<Option<TestStep>>,
2929 #[serde(rename = "vend")]
2930 vend: Strict<TestStep>,
2931 #[serde(rename = "write")]
2932 #[serde(default)]
2933 write: Strict<Option<TestStep>>,
2934 }
2935 let wire = __Wire::deserialize(deserializer)?;
2936 Ok(Self {
2937 access: wire.access.0,
2938 vend: wire.vend.0,
2939 write: wire.write.0,
2940 })
2941 }
2942}
2943
2944#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2946pub struct UpdateVolumeCredentialRequest {
2947 #[serde(rename = "credential")]
2949 pub credential: Credential,
2950}
2951impl<'de> DeserializeStrict<'de> for UpdateVolumeCredentialRequest {
2952 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2953 #[derive(Deserialize)]
2954 #[serde(deny_unknown_fields)]
2955 struct __Wire {
2956 #[serde(rename = "credential")]
2957 credential: Strict<Credential>,
2958 }
2959 let wire = __Wire::deserialize(deserializer)?;
2960 Ok(Self {
2961 credential: wire.credential.0,
2962 })
2963 }
2964}
2965
2966#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2968pub struct UpdateVolumeStatusRequest {
2969 #[serde(rename = "status")]
2971 pub status: VolumeStatus,
2972}
2973impl<'de> DeserializeStrict<'de> for UpdateVolumeStatusRequest {
2974 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2975 #[derive(Deserialize)]
2976 #[serde(deny_unknown_fields)]
2977 struct __Wire {
2978 #[serde(rename = "status")]
2979 status: Strict<VolumeStatus>,
2980 }
2981 let wire = __Wire::deserialize(deserializer)?;
2982 Ok(Self {
2983 status: wire.status.0,
2984 })
2985 }
2986}
2987
2988#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2990pub struct UpstreamFileSystem {
2991 #[serde(rename = "projectId")]
2993 pub project_id: String,
2994}
2995impl<'de> DeserializeStrict<'de> for UpstreamFileSystem {
2996 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2997 #[derive(Deserialize)]
2998 #[serde(deny_unknown_fields)]
2999 struct __Wire {
3000 #[serde(rename = "projectId")]
3001 project_id: Strict<String>,
3002 }
3003 let wire = __Wire::deserialize(deserializer)?;
3004 Ok(Self {
3005 project_id: wire.project_id.0,
3006 })
3007 }
3008}
3009
3010#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3012pub struct VolumeDetails {
3013 #[serde(rename = "credential")]
3015 pub credential: CredentialConfig,
3016 #[serde(rename = "identity")]
3018 #[serde(default, skip_serializing_if = "Option::is_none")]
3019 pub identity: Option<VolumeIdentity>,
3020 #[serde(rename = "region")]
3022 #[serde(default, skip_serializing_if = "Option::is_none")]
3023 pub region: Option<String>,
3024 #[serde(rename = "status")]
3026 pub status: VolumeStatus,
3027 #[serde(rename = "uri")]
3029 pub uri: String,
3030}
3031impl<'de> DeserializeStrict<'de> for VolumeDetails {
3032 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3033 #[derive(Deserialize)]
3034 #[serde(deny_unknown_fields)]
3035 struct __Wire {
3036 #[serde(rename = "credential")]
3037 credential: Strict<CredentialConfig>,
3038 #[serde(rename = "identity")]
3039 #[serde(default)]
3040 identity: Strict<Option<VolumeIdentity>>,
3041 #[serde(rename = "region")]
3042 #[serde(default)]
3043 region: Strict<Option<String>>,
3044 #[serde(rename = "status")]
3045 status: Strict<VolumeStatus>,
3046 #[serde(rename = "uri")]
3047 uri: Strict<String>,
3048 }
3049 let wire = __Wire::deserialize(deserializer)?;
3050 Ok(Self {
3051 credential: wire.credential.0,
3052 identity: wire.identity.0,
3053 region: wire.region.0,
3054 status: wire.status.0,
3055 uri: wire.uri.0,
3056 })
3057 }
3058}
3059
3060#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3062pub struct VolumeIdentity {
3063 #[serde(rename = "audience")]
3065 pub audience: String,
3066 #[serde(rename = "issuer")]
3068 pub issuer: String,
3069 #[serde(rename = "subject")]
3071 pub subject: String,
3072 #[serde(rename = "trustPolicy")]
3074 pub trust_policy: String,
3075}
3076impl<'de> DeserializeStrict<'de> for VolumeIdentity {
3077 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3078 #[derive(Deserialize)]
3079 #[serde(deny_unknown_fields)]
3080 struct __Wire {
3081 #[serde(rename = "audience")]
3082 audience: Strict<String>,
3083 #[serde(rename = "issuer")]
3084 issuer: Strict<String>,
3085 #[serde(rename = "subject")]
3086 subject: Strict<String>,
3087 #[serde(rename = "trustPolicy")]
3088 trust_policy: Strict<String>,
3089 }
3090 let wire = __Wire::deserialize(deserializer)?;
3091 Ok(Self {
3092 audience: wire.audience.0,
3093 issuer: wire.issuer.0,
3094 subject: wire.subject.0,
3095 trust_policy: wire.trust_policy.0,
3096 })
3097 }
3098}
3099
3100#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3102pub struct VolumePage {
3103 #[serde(rename = "items")]
3105 pub items: Vec<VolumeView>,
3106 #[serde(rename = "nextPageToken")]
3108 #[serde(default, skip_serializing_if = "Option::is_none")]
3109 pub next_page_token: Option<String>,
3110}
3111impl<'de> DeserializeStrict<'de> for VolumePage {
3112 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3113 #[derive(Deserialize)]
3114 #[serde(deny_unknown_fields)]
3115 struct __Wire {
3116 #[serde(rename = "items")]
3117 items: Strict<Vec<VolumeView>>,
3118 #[serde(rename = "nextPageToken")]
3119 #[serde(default)]
3120 next_page_token: Strict<Option<String>>,
3121 }
3122 let wire = __Wire::deserialize(deserializer)?;
3123 Ok(Self {
3124 items: wire.items.0,
3125 next_page_token: wire.next_page_token.0,
3126 })
3127 }
3128}
3129
3130#[derive(Clone, Debug, PartialEq, Eq)]
3132pub enum VolumeStatus {
3133 Active,
3135 Retired,
3137 Revoked,
3139 Unknown(String),
3141}
3142impl Serialize for VolumeStatus {
3143 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3144 serializer.serialize_str(match self {
3145 Self::Active => "active",
3146 Self::Retired => "retired",
3147 Self::Revoked => "revoked",
3148 Self::Unknown(value) => value,
3149 })
3150 }
3151}
3152impl<'de> Deserialize<'de> for VolumeStatus {
3153 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3154 Ok(match String::deserialize(deserializer)?.as_str() {
3155 "active" => Self::Active,
3156 "retired" => Self::Retired,
3157 "revoked" => Self::Revoked,
3158 value => Self::Unknown(value.to_owned()),
3159 })
3160 }
3161}
3162impl<'de> DeserializeStrict<'de> for VolumeStatus {
3163 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3164 #[derive(Deserialize)]
3165 enum __Known {
3166 #[serde(rename = "active")]
3167 Active,
3168 #[serde(rename = "retired")]
3169 Retired,
3170 #[serde(rename = "revoked")]
3171 Revoked,
3172 }
3173 Ok(match __Known::deserialize(deserializer)? {
3174 __Known::Active => Self::Active,
3175 __Known::Retired => Self::Retired,
3176 __Known::Revoked => Self::Revoked,
3177 })
3178 }
3179}
3180
3181#[derive(Clone, Debug, PartialEq, Eq)]
3183pub enum VolumeView {
3184 Organization(Box<VolumeViewOrganization>),
3186 Platform(VolumeViewPlatform),
3188 Unknown { tag: String, value: Value },
3190}
3191impl Serialize for VolumeView {
3192 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3193 match self {
3194 Self::Organization(value) => {
3195 let mut object = serde_json::Map::new();
3196 object.insert("type".into(), Value::String("organization".into()));
3197 object.insert(
3198 "organization".into(),
3199 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3200 );
3201 Value::Object(object).serialize(serializer)
3202 }
3203 Self::Platform(value) => {
3204 let mut object = serde_json::Map::new();
3205 object.insert("type".into(), Value::String("platform".into()));
3206 object.insert(
3207 "platform".into(),
3208 serde_json::to_value(value).map_err(serde::ser::Error::custom)?,
3209 );
3210 Value::Object(object).serialize(serializer)
3211 }
3212 Self::Unknown { tag, value } => {
3213 if value.get("type").and_then(Value::as_str) != Some(tag.as_str()) {
3214 return Err(serde::ser::Error::custom(
3215 "unknown union discriminator mismatch",
3216 ));
3217 }
3218 value.serialize(serializer)
3219 }
3220 }
3221 }
3222}
3223impl<'de> Deserialize<'de> for VolumeView {
3224 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3225 let value = Value::deserialize(deserializer)?;
3226 let tag = value
3227 .get("type")
3228 .and_then(Value::as_str)
3229 .ok_or_else(|| serde::de::Error::custom("union requires type"))?;
3230 match tag {
3231 "organization" => Ok(Self::Organization(
3232 serde_json::from_value(
3233 value
3234 .get("organization")
3235 .cloned()
3236 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3237 )
3238 .map_err(serde::de::Error::custom)?,
3239 )),
3240 "platform" => Ok(Self::Platform(
3241 serde_json::from_value(
3242 value
3243 .get("platform")
3244 .cloned()
3245 .ok_or_else(|| serde::de::Error::custom("union requires matching arm"))?,
3246 )
3247 .map_err(serde::de::Error::custom)?,
3248 )),
3249 tag => Ok(Self::Unknown {
3250 tag: tag.to_owned(),
3251 value,
3252 }),
3253 }
3254 }
3255}
3256impl<'de> DeserializeStrict<'de> for VolumeView {
3257 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3258 #[derive(Deserialize)]
3259 enum __Tag0 {
3260 #[serde(rename = "organization")]
3261 Value,
3262 }
3263 #[derive(Deserialize)]
3264 #[serde(deny_unknown_fields)]
3265 struct __Arm0 {
3266 #[serde(rename = "type")]
3267 _tag: __Tag0,
3268 #[serde(rename = "organization")]
3269 value: Strict<VolumeViewOrganization>,
3270 }
3271 #[derive(Deserialize)]
3272 enum __Tag1 {
3273 #[serde(rename = "platform")]
3274 Value,
3275 }
3276 #[derive(Deserialize)]
3277 #[serde(deny_unknown_fields)]
3278 struct __Arm1 {
3279 #[serde(rename = "type")]
3280 _tag: __Tag1,
3281 #[serde(rename = "platform")]
3282 value: Strict<VolumeViewPlatform>,
3283 }
3284 #[derive(Deserialize)]
3285 #[serde(untagged)]
3286 enum __Known {
3287 Organization(Box<__Arm0>),
3288 Platform(Box<__Arm1>),
3289 }
3290 Ok(match __Known::deserialize(deserializer)? {
3291 __Known::Organization(arm) => Self::Organization(Box::new(arm.value.0)),
3292 __Known::Platform(arm) => Self::Platform(arm.value.0),
3293 })
3294 }
3295}
3296
3297#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3299pub struct VolumeViewOrganization {
3300 #[serde(rename = "details")]
3302 #[serde(default, skip_serializing_if = "Option::is_none")]
3303 pub details: Option<VolumeDetails>,
3304 #[serde(rename = "id")]
3306 pub id: String,
3307 #[serde(rename = "name")]
3309 pub name: String,
3310 #[serde(rename = "orgId")]
3312 pub org_id: String,
3313}
3314impl<'de> DeserializeStrict<'de> for VolumeViewOrganization {
3315 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3316 #[derive(Deserialize)]
3317 #[serde(deny_unknown_fields)]
3318 struct __Wire {
3319 #[serde(rename = "details")]
3320 #[serde(default)]
3321 details: Strict<Option<VolumeDetails>>,
3322 #[serde(rename = "id")]
3323 id: Strict<String>,
3324 #[serde(rename = "name")]
3325 name: Strict<String>,
3326 #[serde(rename = "orgId")]
3327 org_id: Strict<String>,
3328 }
3329 let wire = __Wire::deserialize(deserializer)?;
3330 Ok(Self {
3331 details: wire.details.0,
3332 id: wire.id.0,
3333 name: wire.name.0,
3334 org_id: wire.org_id.0,
3335 })
3336 }
3337}
3338
3339#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
3341pub struct VolumeViewPlatform {
3342 #[serde(rename = "id")]
3344 pub id: String,
3345 #[serde(rename = "provider")]
3347 pub provider: String,
3348}
3349impl<'de> DeserializeStrict<'de> for VolumeViewPlatform {
3350 fn deserialize_strict<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3351 #[derive(Deserialize)]
3352 #[serde(deny_unknown_fields)]
3353 struct __Wire {
3354 #[serde(rename = "id")]
3355 id: Strict<String>,
3356 #[serde(rename = "provider")]
3357 provider: Strict<String>,
3358 }
3359 let wire = __Wire::deserialize(deserializer)?;
3360 Ok(Self {
3361 id: wire.id.0,
3362 provider: wire.provider.0,
3363 })
3364 }
3365}
3366
3367#[derive(Clone, Debug, PartialEq, Eq)]
3369pub enum StorageError {
3370 Conflict { reason: String },
3372 InvalidArgument { reason: String },
3374 LimitReached { reason: String },
3376 NotFound { resource: String },
3378}
3379impl StorageError {
3380 pub fn status(&self) -> u16 {
3382 match self {
3383 Self::Conflict { .. } => 409,
3384 Self::InvalidArgument { .. } => 400,
3385 Self::LimitReached { .. } => 412,
3386 Self::NotFound { .. } => 404,
3387 }
3388 }
3389 pub fn envelope(&self, instance: String) -> ErrorEnvelope {
3391 match self {
3392 Self::Conflict { reason } => {
3393 let mut envelope = ErrorEnvelope::new("CONFLICT", "Storage:Conflict", instance);
3394 envelope
3395 .parameters
3396 .insert("reason".into(), reason.to_string());
3397 envelope
3398 }
3399 Self::InvalidArgument { reason } => {
3400 let mut envelope =
3401 ErrorEnvelope::new("INVALID_ARGUMENT", "Storage:InvalidArgument", instance);
3402 envelope
3403 .parameters
3404 .insert("reason".into(), reason.to_string());
3405 envelope
3406 }
3407 Self::LimitReached { reason } => {
3408 let mut envelope =
3409 ErrorEnvelope::new("FAILED_PRECONDITION", "Storage:LimitReached", instance);
3410 envelope
3411 .parameters
3412 .insert("reason".into(), reason.to_string());
3413 envelope
3414 }
3415 Self::NotFound { resource } => {
3416 let mut envelope = ErrorEnvelope::new("NOT_FOUND", "Storage:NotFound", instance);
3417 envelope
3418 .parameters
3419 .insert("resource".into(), resource.to_string());
3420 envelope
3421 }
3422 }
3423 }
3424 pub fn decode_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
3426 if envelope.error_instance_id.len() != 36
3427 || Uuid::parse_str(&envelope.error_instance_id).is_err()
3428 {
3429 return None;
3430 }
3431 match envelope.error_name.as_str() {
3432 "Storage:Conflict" => {
3433 if envelope.error_code != "CONFLICT" {
3434 return None;
3435 }
3436 let reason = envelope.parameters.get("reason")?.clone();
3437 Some(Self::Conflict { reason })
3438 }
3439 "Storage:InvalidArgument" => {
3440 if envelope.error_code != "INVALID_ARGUMENT" {
3441 return None;
3442 }
3443 let reason = envelope.parameters.get("reason")?.clone();
3444 Some(Self::InvalidArgument { reason })
3445 }
3446 "Storage:LimitReached" => {
3447 if envelope.error_code != "FAILED_PRECONDITION" {
3448 return None;
3449 }
3450 let reason = envelope.parameters.get("reason")?.clone();
3451 Some(Self::LimitReached { reason })
3452 }
3453 "Storage:NotFound" => {
3454 if envelope.error_code != "NOT_FOUND" {
3455 return None;
3456 }
3457 let resource = envelope.parameters.get("resource")?.clone();
3458 Some(Self::NotFound { resource })
3459 }
3460 _ => None,
3461 }
3462 }
3463}
3464impl Display for StorageError {
3465 fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
3466 match self {
3467 Self::Conflict { reason } => write!(formatter, "Storage:Conflict (reason: {})", reason),
3468 Self::InvalidArgument { reason } => {
3469 write!(formatter, "Storage:InvalidArgument (reason: {})", reason)
3470 }
3471 Self::LimitReached { reason } => {
3472 write!(formatter, "Storage:LimitReached (reason: {})", reason)
3473 }
3474 Self::NotFound { resource } => {
3475 write!(formatter, "Storage:NotFound (resource: {})", resource)
3476 }
3477 }
3478 }
3479}
3480impl StdError for StorageError {}
3481impl ServiceError for StorageError {
3482 fn to_envelope(&self, instance: String) -> ErrorEnvelope {
3483 Self::envelope(self, instance)
3484 }
3485 fn from_envelope(envelope: &ErrorEnvelope) -> Option<Self> {
3486 Self::decode_envelope(envelope)
3487 }
3488}
3489#[automatically_derived]
3490impl Default for PageRequest {
3491 fn default() -> Self {
3492 Self {
3493 page_size: None,
3494 page_token: None,
3495 }
3496 }
3497}