summaryrefslogtreecommitdiffstats
path: root/src/assets.rs
diff options
context:
space:
mode:
authorLibravatar bigfoot547 <[email protected]>2025-02-01 23:06:37 -0600
committerLibravatar bigfoot547 <[email protected]>2025-02-01 23:06:37 -0600
commitc19a1077e85334a3e5ba885a60b03d76409a2b2e (patch)
tree5e726e8180770ac9c2f6c415a0437d6d2c29c226 /src/assets.rs
parentrandom changes (diff)
restructure project
Diffstat (limited to 'src/assets.rs')
-rw-r--r--src/assets.rs86
1 files changed, 0 insertions, 86 deletions
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<String, Asset>
-}
-
-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<HashMap<String, T>, D::Error>
-where
- D: Deserializer<'de>,
- T: SetName + Deserialize<'de>
-{
- struct AssetVisitor<T>(PhantomData<T>);
-
- impl<'de, T> Visitor<'de> for AssetVisitor<T>
- where
- T: SetName + Deserialize<'de>
- {
- type Value = HashMap<String, T>;
-
- fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
- formatter.write_str("asset objects map")
- }
-
- fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
- where
- A: MapAccess<'de>,
- {
- let mut out = HashMap::new();
-
- while let Some((key, mut asset)) = map.next_entry::<String, T>()? {
- 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::<AssetIndex>(r#"{
- "virtual": true,
- "objects": {
- "object1": { "hash": "0d000710b71ca9aafabd8f587768431d0b560b32", "size": 100 },
- "object2/abc": { "hash": "0e000710b71ca9aafabd8f587768431d0b560b32", "size": 10000 }
- }
- }"#).unwrap());
- }
-}