From c19a1077e85334a3e5ba885a60b03d76409a2b2e Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Sat, 1 Feb 2025 23:06:37 -0600 Subject: restructure project --- src/assets.rs | 86 ----------------------------------------------------------- 1 file changed, 86 deletions(-) delete mode 100644 src/assets.rs (limited to 'src/assets.rs') diff --git a/src/assets.rs b/src/assets.rs deleted file mode 100644 index 15087c9..0000000 --- a/src/assets.rs +++ /dev/null @@ -1,86 +0,0 @@ -use std::collections::HashMap; -use std::fmt::Formatter; -use std::marker::PhantomData; -use serde::{Deserialize, Deserializer}; -use serde::de::{MapAccess, Visitor}; -use sha1_smol::Digest; - -#[derive(Debug, Deserialize)] -pub struct Asset { - #[serde(skip)] - pub name: String, - pub hash: Digest, - pub size: usize -} - -#[derive(Debug, Deserialize)] -pub struct AssetIndex { - #[serde(rename = "virtual", default)] - pub virtual_assets: bool, - #[serde(default)] - pub map_to_resources: bool, - - #[serde(deserialize_with = "deserialize_assets")] - pub objects: HashMap -} - -trait SetName { - fn set_name(&mut self, name: String); -} - -impl SetName for Asset { - fn set_name(&mut self, name: String) { - self.name = name; - } -} - -fn deserialize_assets<'de, D, T>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de>, - T: SetName + Deserialize<'de> -{ - struct AssetVisitor(PhantomData); - - impl<'de, T> Visitor<'de> for AssetVisitor - where - T: SetName + Deserialize<'de> - { - type Value = HashMap; - - fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { - formatter.write_str("asset objects map") - } - - fn visit_map(self, mut map: A) -> Result - where - A: MapAccess<'de>, - { - let mut out = HashMap::new(); - - while let Some((key, mut asset)) = map.next_entry::()? { - asset.set_name(key.clone()); - out.insert(key, asset); - } - - Ok(out) - } - } - - deserializer.deserialize_any(AssetVisitor(PhantomData)) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_it() { - dbg!(serde_json::from_str::(r#"{ - "virtual": true, - "objects": { - "object1": { "hash": "0d000710b71ca9aafabd8f587768431d0b560b32", "size": 100 }, - "object2/abc": { "hash": "0e000710b71ca9aafabd8f587768431d0b560b32", "size": 10000 } - } - }"#).unwrap()); - } -} -- cgit v1.2.3-70-g09d2