pub mod api_definition;
pub mod api_deployment;
pub mod component;
use serde::Serialize;
pub trait DiffSerialize {
fn to_diffable_string(&self) -> anyhow::Result<String>;
}
pub trait ToYamlValueWithoutNulls {
fn to_yaml_value_without_nulls(&self) -> serde_yaml::Result<serde_yaml::Value>;
}
impl<T: Serialize> ToYamlValueWithoutNulls for T {
fn to_yaml_value_without_nulls(&self) -> serde_yaml::Result<serde_yaml::Value> {
Ok(yaml_value_without_nulls(serde_yaml::to_value(self)?))
}
}
fn yaml_value_without_nulls(value: serde_yaml::Value) -> serde_yaml::Value {
match value {
serde_yaml::Value::Mapping(mapping) => serde_yaml::Value::Mapping(
mapping
.into_iter()
.filter_map(|(key, value)| {
if value == serde_yaml::Value::Null {
None
} else {
Some((key, yaml_value_without_nulls(value)))
}
})
.collect(),
),
serde_yaml::Value::Sequence(sequence) => serde_yaml::Value::Sequence(
sequence.into_iter().map(yaml_value_without_nulls).collect(),
),
_ => value,
}
}