k8s_openapi/v1_33/api/storage/v1/
volume_attachment_source.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct VolumeAttachmentSource {
6 pub inline_volume_spec: Option<crate::api::core::v1::PersistentVolumeSpec>,
8
9 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}