Skip to main content

k8s_openapi/v1_36/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::borrow::Cow<'static, str> {
112        "io.k8s.api.storage.v1.VolumeAttachmentSource".into()
113    }
114
115    fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
116        crate::schemars::json_schema!({
117            "description": "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.",
118            "type": "object",
119            "properties": {
120                "inlineVolumeSpec": ({
121                    let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::PersistentVolumeSpec>();
122                    schema_obj.ensure_object().insert("description".into(), "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());
123                    schema_obj
124                }),
125                "persistentVolumeName": {
126                    "description": "persistentVolumeName represents the name of the persistent volume to attach.",
127                    "type": "string",
128                },
129            },
130        })
131    }
132}
133
134#[cfg(feature = "schemars08")]
135impl crate::schemars08::JsonSchema for VolumeAttachmentSource {
136    fn schema_name() -> std::string::String {
137        "io.k8s.api.storage.v1.VolumeAttachmentSource".into()
138    }
139
140    fn json_schema(__gen: &mut crate::schemars08::gen::SchemaGenerator) -> crate::schemars08::schema::Schema {
141        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
142            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
143                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()),
144                ..Default::default()
145            })),
146            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::Object))),
147            object: Some(std::boxed::Box::new(crate::schemars08::schema::ObjectValidation {
148                properties: [
149                    (
150                        "inlineVolumeSpec".into(),
151                        {
152                            let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::PersistentVolumeSpec>().into_object();
153                            schema_obj.metadata = Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
154                                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()),
155                                ..Default::default()
156                            }));
157                            crate::schemars08::schema::Schema::Object(schema_obj)
158                        },
159                    ),
160                    (
161                        "persistentVolumeName".into(),
162                        crate::schemars08::schema::Schema::Object(crate::schemars08::schema::SchemaObject {
163                            metadata: Some(std::boxed::Box::new(crate::schemars08::schema::Metadata {
164                                description: Some("persistentVolumeName represents the name of the persistent volume to attach.".into()),
165                                ..Default::default()
166                            })),
167                            instance_type: Some(crate::schemars08::schema::SingleOrVec::Single(std::boxed::Box::new(crate::schemars08::schema::InstanceType::String))),
168                            ..Default::default()
169                        }),
170                    ),
171                ].into(),
172                ..Default::default()
173            })),
174            ..Default::default()
175        })
176    }
177}