k8s_openapi/v1_35/api/core/v1/
resource_status.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct ResourceStatus {
6 pub name: std::string::String,
8
9 pub resources: Option<std::vec::Vec<crate::api::core::v1::ResourceHealth>>,
11}
12
13impl crate::DeepMerge for ResourceStatus {
14 fn merge_from(&mut self, other: Self) {
15 crate::DeepMerge::merge_from(&mut self.name, other.name);
16 crate::merge_strategies::list::map(
17 &mut self.resources,
18 other.resources,
19 &[|lhs, rhs| lhs.resource_id == rhs.resource_id],
20 |current_item, other_item| {
21 crate::DeepMerge::merge_from(current_item, other_item);
22 },
23 );
24 }
25}
26
27impl<'de> crate::serde::Deserialize<'de> for ResourceStatus {
28 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
29 #[allow(non_camel_case_types)]
30 enum Field {
31 Key_name,
32 Key_resources,
33 Other,
34 }
35
36 impl<'de> crate::serde::Deserialize<'de> for Field {
37 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
38 struct Visitor;
39
40 impl crate::serde::de::Visitor<'_> for Visitor {
41 type Value = Field;
42
43 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
44 f.write_str("field identifier")
45 }
46
47 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
48 Ok(match v {
49 "name" => Field::Key_name,
50 "resources" => Field::Key_resources,
51 _ => Field::Other,
52 })
53 }
54 }
55
56 deserializer.deserialize_identifier(Visitor)
57 }
58 }
59
60 struct Visitor;
61
62 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
63 type Value = ResourceStatus;
64
65 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
66 f.write_str("ResourceStatus")
67 }
68
69 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
70 let mut value_name: Option<std::string::String> = None;
71 let mut value_resources: Option<std::vec::Vec<crate::api::core::v1::ResourceHealth>> = None;
72
73 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
74 match key {
75 Field::Key_name => value_name = crate::serde::de::MapAccess::next_value(&mut map)?,
76 Field::Key_resources => value_resources = crate::serde::de::MapAccess::next_value(&mut map)?,
77 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
78 }
79 }
80
81 Ok(ResourceStatus {
82 name: value_name.unwrap_or_default(),
83 resources: value_resources,
84 })
85 }
86 }
87
88 deserializer.deserialize_struct(
89 "ResourceStatus",
90 &[
91 "name",
92 "resources",
93 ],
94 Visitor,
95 )
96 }
97}
98
99impl crate::serde::Serialize for ResourceStatus {
100 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
101 let mut state = serializer.serialize_struct(
102 "ResourceStatus",
103 1 +
104 self.resources.as_ref().map_or(0, |_| 1),
105 )?;
106 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "name", &self.name)?;
107 if let Some(value) = &self.resources {
108 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "resources", value)?;
109 }
110 crate::serde::ser::SerializeStruct::end(state)
111 }
112}
113
114#[cfg(feature = "schemars")]
115impl crate::schemars::JsonSchema for ResourceStatus {
116 fn schema_name() -> std::borrow::Cow<'static, str> {
117 "io.k8s.api.core.v1.ResourceStatus".into()
118 }
119
120 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
121 crate::schemars::json_schema!({
122 "description": "ResourceStatus represents the status of a single resource allocated to a Pod.",
123 "type": "object",
124 "properties": {
125 "name": {
126 "description": "Name of the resource. Must be unique within the pod and in case of non-DRA resource, match one of the resources from the pod spec. For DRA resources, the value must be \"claim:<claim_name>/<request>\". When this status is reported about a container, the \"claim_name\" and \"request\" must match one of the claims of this container.",
127 "type": "string",
128 },
129 "resources": {
130 "description": "List of unique resources health. Each element in the list contains an unique resource ID and its health. At a minimum, for the lifetime of a Pod, resource ID must uniquely identify the resource allocated to the Pod on the Node. If other Pod on the same Node reports the status with the same resource ID, it must be the same resource they share. See ResourceID type definition for a specific format it has in various use cases.",
131 "type": "array",
132 "items": (__gen.subschema_for::<crate::api::core::v1::ResourceHealth>()),
133 },
134 },
135 "required": [
136 "name",
137 ],
138 })
139 }
140}