k8s_openapi/v1_33/api/storage/v1/
volume_attachment_source.rs

1// Generated from definition io.k8s.api.storage.v1.VolumeAttachmentSource
2
3/// VolumeAttachmentSource represents a volume that should be attached. Right now only PersistentVolumes can be attached via external attacher, in the future we may allow also inline volumes in pods. Exactly one member can be set.
4#[derive(Clone, Debug, Default, PartialEq)]
5pub struct VolumeAttachmentSource {
6    /// inlineVolumeSpec contains all the information necessary to attach a persistent volume defined by a pod's inline VolumeSource. This field is populated only for the CSIMigration feature. It contains translated fields from a pod's inline VolumeSource to a PersistentVolumeSpec. This field is beta-level and is only honored by servers that enabled the CSIMigration feature.
7    pub inline_volume_spec: Option<crate::api::core::v1::PersistentVolumeSpec>,
8
9    /// persistentVolumeName represents the name of the persistent volume to attach.
10    pub persistent_volume_name: Option<std::string::String>,
11}
12
13impl crate::DeepMerge for VolumeAttachmentSource {
14    fn merge_from(&mut self, other: Self) {
15        crate::DeepMerge::merge_from(&mut self.inline_volume_spec, other.inline_volume_spec);
16        crate::DeepMerge::merge_from(&mut self.persistent_volume_name, other.persistent_volume_name);
17    }
18}
19
20impl<'de> crate::serde::Deserialize<'de> for VolumeAttachmentSource {
21    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
22        #[allow(non_camel_case_types)]
23        enum Field {
24            Key_inline_volume_spec,
25            Key_persistent_volume_name,
26            Other,
27        }
28
29        impl<'de> crate::serde::Deserialize<'de> for Field {
30            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
31                struct Visitor;
32
33                impl crate::serde::de::Visitor<'_> for Visitor {
34                    type Value = Field;
35
36                    fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
37                        f.write_str("field identifier")
38                    }
39
40                    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
41                        Ok(match v {
42                            "inlineVolumeSpec" => Field::Key_inline_volume_spec,
43                            "persistentVolumeName" => Field::Key_persistent_volume_name,
44                            _ => Field::Other,
45                        })
46                    }
47                }
48
49                deserializer.deserialize_identifier(Visitor)
50            }
51        }
52
53        struct Visitor;
54
55        impl<'de> crate::serde::de::Visitor<'de> for Visitor {
56            type Value = VolumeAttachmentSource;
57
58            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
59                f.write_str("VolumeAttachmentSource")
60            }
61
62            fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
63                let mut value_inline_volume_spec: Option<crate::api::core::v1::PersistentVolumeSpec> = None;
64                let mut value_persistent_volume_name: Option<std::string::String> = None;
65
66                while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
67                    match key {
68                        Field::Key_inline_volume_spec => value_inline_volume_spec = crate::serde::de::MapAccess::next_value(&mut map)?,
69                        Field::Key_persistent_volume_name => value_persistent_volume_name = crate::serde::de::MapAccess::next_value(&mut map)?,
70                        Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
71                    }
72                }
73
74                Ok(VolumeAttachmentSource {
75                    inline_volume_spec: value_inline_volume_spec,
76                    persistent_volume_name: value_persistent_volume_name,
77                })
78            }
79        }
80
81        deserializer.deserialize_struct(
82            "VolumeAttachmentSource",
83            &[
84                "inlineVolumeSpec",
85                "persistentVolumeName",
86            ],
87            Visitor,
88        )
89    }
90}
91
92impl crate::serde::Serialize for VolumeAttachmentSource {
93    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
94        let mut state = serializer.serialize_struct(
95            "VolumeAttachmentSource",
96            self.inline_volume_spec.as_ref().map_or(0, |_| 1) +
97            self.persistent_volume_name.as_ref().map_or(0, |_| 1),
98        )?;
99        if let Some(value) = &self.inline_volume_spec {
100            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "inlineVolumeSpec", value)?;
101        }
102        if let Some(value) = &self.persistent_volume_name {
103            crate::serde::ser::SerializeStruct::serialize_field(&mut state, "persistentVolumeName", value)?;
104        }
105        crate::serde::ser::SerializeStruct::end(state)
106    }
107}
108
109#[cfg(feature = "schemars")]
110impl crate::schemars::JsonSchema for VolumeAttachmentSource {
111    fn schema_name() -> std::string::String {
112        "io.k8s.api.storage.v1.VolumeAttachmentSource".into()
113    }
114
115    fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
116        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
117            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
118                description: Some("VolumeAttachmentSource represents a volume that should be attached. Right now only PersistentVolumes can be attached via external attacher, in the future we may allow also inline volumes in pods. Exactly one member can be set.".into()),
119                ..Default::default()
120            })),
121            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::Object))),
122            object: Some(std::boxed::Box::new(crate::schemars::schema::ObjectValidation {
123                properties: [
124                    (
125                        "inlineVolumeSpec".into(),
126                        {
127                            let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::PersistentVolumeSpec>().into_object();
128                            schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
129                                description: Some("inlineVolumeSpec contains all the information necessary to attach a persistent volume defined by a pod's inline VolumeSource. This field is populated only for the CSIMigration feature. It contains translated fields from a pod's inline VolumeSource to a PersistentVolumeSpec. This field is beta-level and is only honored by servers that enabled the CSIMigration feature.".into()),
130                                ..Default::default()
131                            }));
132                            crate::schemars::schema::Schema::Object(schema_obj)
133                        },
134                    ),
135                    (
136                        "persistentVolumeName".into(),
137                        crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
138                            metadata: Some(std::boxed::Box::new(crate::schemars::schema::Metadata {
139                                description: Some("persistentVolumeName represents the name of the persistent volume to attach.".into()),
140                                ..Default::default()
141                            })),
142                            instance_type: Some(crate::schemars::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars::schema::InstanceType::String))),
143                            ..Default::default()
144                        }),
145                    ),
146                ].into(),
147                ..Default::default()
148            })),
149            ..Default::default()
150        })
151    }
152}