diff --git a/schemsearch-files/src/lib.rs b/schemsearch-files/src/lib.rs
index 719d47f..502a1e4 100644
--- a/schemsearch-files/src/lib.rs
+++ b/schemsearch-files/src/lib.rs
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-use std::collections::HashMap;
+use std::collections::hash_map::{HashMap};
use std::io::Read;
use std::path::PathBuf;
use fastnbt::error::Error;
@@ -105,20 +105,22 @@ impl SchematicVersioned {
}
}
-impl From for SchematicVersioned {
- fn from(value: SchematicRaw) -> Self {
+impl TryFrom for SchematicVersioned {
+ type Error = Error;
+
+ fn try_from(value: SchematicRaw) -> Result {
match value.version {
1 => {
- let schematic: SpongeV1Schematic = SpongeV1Schematic::deserialize(MapDeserializer::new(value.data.into_iter())).unwrap();
- return SchematicVersioned::V1(schematic);
+ let schematic: SpongeV1Schematic = fastnbt::from_value(&fastnbt::to_value(value.data)?)?;
+ return Ok(SchematicVersioned::V1(schematic));
},
2 => {
- let schematic: SpongeV2Schematic = SpongeV2Schematic::deserialize(MapDeserializer::new(value.data.into_iter())).unwrap();
- return SchematicVersioned::V2(schematic);
+ let schematic: SpongeV2Schematic = fastnbt::from_value(&fastnbt::to_value(value.data)?)?;
+ return Ok(SchematicVersioned::V2(schematic));
},
3 => {
- let schematic: SpongeV3Schematic = SpongeV3Schematic::deserialize(MapDeserializer::new(value.data.into_iter())).unwrap();
- return SchematicVersioned::V3(schematic);
+ let schematic: SpongeV3Schematic = fastnbt::from_value(&fastnbt::to_value(value.data)?)?;
+ return Ok(SchematicVersioned::V3(schematic));
}
_ => panic!("Unknown Schematic Version: {}", value.version),
}
@@ -212,7 +214,7 @@ pub struct Entity {
impl SchematicVersioned {
pub fn load_data(data: R) -> Result where R: Read {
let raw: SchematicRaw = fastnbt::from_reader(GzDecoder::new(data))?;
- Ok(SchematicVersioned::from(raw))
+ SchematicVersioned::try_from(raw)
}
pub fn load(path: &PathBuf) -> Result {