1// Generated from definition io.k8s.api.storage.v1.VolumeAttachmentSource
23/// 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.
7pub inline_volume_spec: Option<crate::api::core::v1::PersistentVolumeSpec>,
89/// persistentVolumeName represents the name of the persistent volume to attach.
10pub persistent_volume_name: Option<std::string::String>,
11}
1213impl crate::DeepMerge for VolumeAttachmentSource {
14fn merge_from(&mut self, other: Self) {
15crate::DeepMerge::merge_from(&mut self.inline_volume_spec, other.inline_volume_spec);
16crate::DeepMerge::merge_from(&mut self.persistent_volume_name, other.persistent_volume_name);
17 }
18}
1920impl<'de> crate::serde::Deserialize<'de> for VolumeAttachmentSource {
21fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
22#[allow(non_camel_case_types)]
23enum Field {
24 Key_inline_volume_spec,
25 Key_persistent_volume_name,
26 Other,
27 }
2829impl<'de> crate::serde::Deserialize<'de> for Field {
30fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
31struct Visitor;
3233impl crate::serde::de::Visitor<'_> for Visitor {
34type Value = Field;
3536fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
37 f.write_str("field identifier")
38 }
3940fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
41Ok(match v {
42"inlineVolumeSpec" => Field::Key_inline_volume_spec,
43"persistentVolumeName" => Field::Key_persistent_volume_name,
44_ => Field::Other,
45 })
46 }
47 }
4849 deserializer.deserialize_identifier(Visitor)
50 }
51 }
5253struct Visitor;
5455impl<'de> crate::serde::de::Visitor<'de> for Visitor {
56type Value = VolumeAttachmentSource;
5758fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
59 f.write_str("VolumeAttachmentSource")
60 }
6162fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
63let mut value_inline_volume_spec: Option<crate::api::core::v1::PersistentVolumeSpec> = None;
64let mut value_persistent_volume_name: Option<std::string::String> = None;
6566while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
67match 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 }
7374Ok(VolumeAttachmentSource {
75 inline_volume_spec: value_inline_volume_spec,
76 persistent_volume_name: value_persistent_volume_name,
77 })
78 }
79 }
8081 deserializer.deserialize_struct(
82"VolumeAttachmentSource",
83&[
84"inlineVolumeSpec",
85"persistentVolumeName",
86 ],
87 Visitor,
88 )
89 }
90}
9192impl crate::serde::Serialize for VolumeAttachmentSource {
93fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
94let mut state = serializer.serialize_struct(
95"VolumeAttachmentSource",
96self.inline_volume_spec.as_ref().map_or(0, |_| 1) +
97self.persistent_volume_name.as_ref().map_or(0, |_| 1),
98 )?;
99if let Some(value) = &self.inline_volume_spec {
100crate::serde::ser::SerializeStruct::serialize_field(&mut state, "inlineVolumeSpec", value)?;
101 }
102if let Some(value) = &self.persistent_volume_name {
103crate::serde::ser::SerializeStruct::serialize_field(&mut state, "persistentVolumeName", value)?;
104 }
105crate::serde::ser::SerializeStruct::end(state)
106 }
107}
108109#[cfg(feature = "schemars")]
110impl crate::schemars::JsonSchema for VolumeAttachmentSource {
111fn schema_name() -> std::string::String {
112"io.k8s.api.storage.v1.VolumeAttachmentSource".into()
113 }
114115fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
116crate::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 {
127let 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 }));
132crate::schemars::schema::Schema::Object(schema_obj)
133 },
134 ),
135 (
136"persistentVolumeName".into(),
137crate::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}