use crate::{Config, HttpEngineConfig};
use slumber_util::yaml::{
self, DeserializeYaml, Expected, Field, SourceMap, SourcedYaml,
StructDeserializer,
};
impl DeserializeYaml for Config {
fn expected() -> Expected {
Expected::Mapping
}
fn deserialize(
mut yaml: SourcedYaml,
source_map: &SourceMap,
) -> yaml::Result<Self> {
yaml.drop_dot_fields();
let default = Self::default();
let mut deserializer = StructDeserializer::new(yaml)?;
let config = Self {
editor: deserializer
.get(Field::new("editor").or(default.editor), source_map)?,
http: deserialize_http_config(&mut deserializer, source_map)?,
#[cfg(feature = "tui")]
tui: crate::tui::deserialize_tui_config(
&mut deserializer,
source_map,
)?,
};
#[cfg(feature = "tui")]
{
deserializer.done()?;
}
Ok(config)
}
}
fn deserialize_http_config(
deserializer: &mut StructDeserializer,
source_map: &SourceMap,
) -> yaml::Result<HttpEngineConfig> {
let default = HttpEngineConfig::default();
Ok(HttpEngineConfig {
ignore_certificate_hosts: deserializer.get(
Field::new("ignore_certificate_hosts")
.or(default.ignore_certificate_hosts),
source_map,
)?,
large_body_size: deserializer.get(
Field::new("large_body_size").or(default.large_body_size),
source_map,
)?,
follow_redirects: deserializer.get(
Field::new("follow_redirects").or(default.follow_redirects),
source_map,
)?,
})
}