use crate::schema::redfish::resource::State as ResourceStateSchema;
use serde_json::Value;
#[cfg(feature = "chassis")]
use crate::schema::redfish::resource::LocationType as ResourceLocationTypeSchema;
#[must_use]
pub fn remove_invalid_resource_state(mut resource: Value) -> Value {
if let Value::Object(ref mut obj) = resource {
if let Some(Value::Object(ref mut status)) = obj.get_mut("Status") {
let state_is_invalid = status
.get("State")
.is_some_and(|v| serde_json::from_value::<ResourceStateSchema>(v.clone()).is_err());
if state_is_invalid {
status.remove("State");
}
}
}
resource
}
#[cfg(feature = "chassis")]
#[must_use]
pub fn remove_invalid_resource_part_location_type(mut resource: Value) -> Value {
if let Value::Object(ref mut obj) = resource {
if let Some(Value::Object(ref mut location)) = obj.get_mut("Location") {
if let Some(Value::Object(ref mut part_location)) = location.get_mut("PartLocation") {
let location_type_is_invalid = part_location.get("LocationType").is_some_and(|v| {
serde_json::from_value::<ResourceLocationTypeSchema>(v.clone()).is_err()
});
if location_type_is_invalid {
part_location.remove("LocationType");
}
}
}
}
resource
}