summaryrefslogtreecommitdiffstats
path: root/alacritty_config_derive/src/config_deserialize/de_struct.rs
diff options
context:
space:
mode:
Diffstat (limited to 'alacritty_config_derive/src/config_deserialize/de_struct.rs')
-rw-r--r--alacritty_config_derive/src/config_deserialize/de_struct.rs26
1 files changed, 19 insertions, 7 deletions
diff --git a/alacritty_config_derive/src/config_deserialize/de_struct.rs b/alacritty_config_derive/src/config_deserialize/de_struct.rs
index 1846f925..d2a7dd82 100644
--- a/alacritty_config_derive/src/config_deserialize/de_struct.rs
+++ b/alacritty_config_derive/src/config_deserialize/de_struct.rs
@@ -42,20 +42,25 @@ pub fn derive_deserialize<T>(
{
let mut config = Self::Value::default();
- // NOTE: This could be used to print unused keys.
- let mut unused = serde_yaml::Mapping::new();
+ // Unused keys for flattening and warning.
+ let mut unused = toml::Table::new();
- while let Some((key, value)) = map.next_entry::<String, serde_yaml::Value>()? {
+ while let Some((key, value)) = map.next_entry::<String, toml::Value>()? {
match key.as_str() {
#match_assignments
_ => {
- unused.insert(serde_yaml::Value::String(key), value);
+ unused.insert(key, value);
},
}
}
#flatten
+ // Warn about unused keys.
+ for key in unused.keys() {
+ log::warn!(target: #LOG_TARGET, "Unused config key: {}", key);
+ }
+
Ok(config)
}
}
@@ -109,7 +114,12 @@ fn field_deserializer(field_streams: &mut FieldStreams, field: &Field) -> Result
match serde::Deserialize::deserialize(value) {
Ok(value) => config.#ident = value,
Err(err) => {
- log::error!(target: #LOG_TARGET, "Config error: {}: {}", #literal, err);
+ log::error!(
+ target: #LOG_TARGET,
+ "Config error: {}: {}",
+ #literal,
+ err.to_string().trim(),
+ );
},
}
};
@@ -133,8 +143,10 @@ fn field_deserializer(field_streams: &mut FieldStreams, field: &Field) -> Result
// Create the tokens to deserialize the flattened struct from the unused fields.
field_streams.flatten.extend(quote! {
- let unused = serde_yaml::Value::Mapping(unused);
- config.#ident = serde::Deserialize::deserialize(unused).unwrap_or_default();
+ // Drain unused fields since they will be used for flattening.
+ let flattened = std::mem::replace(&mut unused, toml::Table::new());
+
+ config.#ident = serde::Deserialize::deserialize(flattened).unwrap_or_default();
});
},
"deprecated" | "removed" => {