k8s_openapi/v1_34/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}