From 54710304adcdb3e31cbf7885d3f36d060e7d813f Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 14 May 2024 21:31:04 +0000 Subject: [PATCH] fix failing compilation when deny_unknown_fields is set --- simdnbt-derive/src/lib.rs | 2 +- simdnbt/examples/registry.rs | 35 +++++++++++++++++++++++++++++++++++ simdnbt/src/error.rs | 4 ++-- 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 simdnbt/examples/registry.rs diff --git a/simdnbt-derive/src/lib.rs b/simdnbt-derive/src/lib.rs index 9bc3741..51d5e0d 100644 --- a/simdnbt-derive/src/lib.rs +++ b/simdnbt-derive/src/lib.rs @@ -55,7 +55,7 @@ pub fn deserialize_derive(input: proc_macro::TokenStream) -> proc_macro::TokenSt let extra_checks = if struct_attrs.deny_unknown_fields { quote! { if !nbt.is_empty() { - return Err(simdnbt::DeserializeError::UnknownField(nbt.keys().next().unwrap().clone())); + return Err(simdnbt::DeserializeError::UnknownField(nbt.keys().next().unwrap().to_string())); } } } else { diff --git a/simdnbt/examples/registry.rs b/simdnbt/examples/registry.rs new file mode 100644 index 0000000..f8a3e41 --- /dev/null +++ b/simdnbt/examples/registry.rs @@ -0,0 +1,35 @@ +use std::{collections::HashMap, io::Cursor}; + +use simdnbt::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] +#[simdnbt(deny_unknown_fields)] +pub struct TrimMaterialElement { + pub asset_name: String, + pub item_model_index: f32, + pub override_armor_materials: HashMap, + pub description: Option, +} + +fn main() { + let original = TrimMaterialElement { + asset_name: "asset name".to_string(), + item_model_index: 0.0, + override_armor_materials: HashMap::from_iter(vec![ + ("asdf".into(), "fdsa".into()), + ("dsfgdgh".into(), "fgjrtiu".into()), + ]), + description: Some("description".to_string()), + }; + + let nbt = original.clone().to_nbt(); + let mut buf = Vec::new(); + nbt.write(&mut buf); + + let nbt = simdnbt::borrow::read(&mut Cursor::new(&buf[..])) + .unwrap() + .unwrap(); + let rewritten = TrimMaterialElement::from_nbt(&nbt).unwrap(); + + assert_eq!(original, rewritten); +} diff --git a/simdnbt/src/error.rs b/simdnbt/src/error.rs index 246dceb..887fea0 100644 --- a/simdnbt/src/error.rs +++ b/simdnbt/src/error.rs @@ -20,6 +20,6 @@ pub enum DeserializeError { MissingField, #[error("Mismatched type for {0}")] MismatchedFieldType(String), - #[error("Unknown fields {0:?}")] - UnknownField(Vec), + #[error("Unknown field {0:?}")] + UnknownField(String), }