diff --git a/src/dls.rs b/src/dls.rs index 18f385c..16af6d2 100644 --- a/src/dls.rs +++ b/src/dls.rs @@ -159,6 +159,30 @@ impl<'t> Host<'t> { } } +#[derive(Default, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "PascalCase")] +pub struct Config { + #[serde(default, deserialize_with = "deserialize_null_as_default")] + pub clusters: Vec, + #[serde(default, deserialize_with = "deserialize_null_as_default")] + pub hosts: Vec, + #[serde(default, deserialize_with = "deserialize_null_as_default")] + pub host_templates: Vec, + #[serde(default, rename = "SSLConfig")] + pub ssl_config: String, +} + +// compensate for go's encoder pitfalls +use serde::{Deserialize, Deserializer}; +fn deserialize_null_as_default<'de, D, T>(deserializer: D) -> std::result::Result +where + T: Default + Deserialize<'de>, + D: Deserializer<'de>, +{ + let opt = Option::deserialize(deserializer)?; + Ok(opt.unwrap_or_default()) +} + #[derive(serde::Deserialize, serde::Serialize)] #[serde(rename_all = "PascalCase")] pub struct ClusterConfig {