From 55c7ea778be2f3ce44d88440607ac8d4117e31d2 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 11 Mar 2026 22:52:11 +0800 Subject: Add dependencies and constants for vault system --- systems/sheet/src/sheet.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'systems/sheet/src') diff --git a/systems/sheet/src/sheet.rs b/systems/sheet/src/sheet.rs index e7a130d..5ee2db7 100644 --- a/systems/sheet/src/sheet.rs +++ b/systems/sheet/src/sheet.rs @@ -5,6 +5,7 @@ use std::{ path::{Path, PathBuf}, }; +use asset_system::{RWDataTest, rw::RWData}; use memmap2::Mmap; use serde::{Deserialize, Serialize}; use tokio::fs; @@ -41,7 +42,7 @@ pub struct Sheet { /// Full Sheet information /// /// Used to wrap as a Sheet object for editing and persistence -#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize, RWDataTest)] pub struct SheetData { /// All local mappings mappings: HashSet, @@ -549,3 +550,58 @@ impl TryFrom<&[u8]> for SheetData { read_sheet_data(value) } } + +impl RWData for SheetData { + type DataType = SheetData; + + async fn read(path: &PathBuf) -> Result { + let read_data = SheetData::full_read(&mut SheetData::empty(), path).await; + match read_data { + Ok(_) => { + let data = SheetData::full_read(&mut SheetData::empty(), path).await; + match data { + Ok(_) => Ok(SheetData::empty()), + Err(e) => Err(asset_system::error::DataReadError::IoError( + std::io::Error::new(std::io::ErrorKind::Other, e.to_string()), + )), + } + } + Err(e) => Err(asset_system::error::DataReadError::IoError( + std::io::Error::new(std::io::ErrorKind::Other, e.to_string()), + )), + } + } + + async fn write( + data: Self::DataType, + path: &PathBuf, + ) -> Result<(), asset_system::error::DataWriteError> { + let write_data = tokio::fs::write(path, data.as_bytes()).await; + match write_data { + Ok(_) => Ok(()), + Err(e) => Err(asset_system::error::DataWriteError::IoError( + std::io::Error::new(std::io::ErrorKind::Other, e.to_string()), + )), + } + } + + fn test_data() -> Self::DataType { + let sheet = SheetData::empty().pack("sheet"); + let mut sheet = sheet; + sheet + .insert_mapping( + LocalMapping::new( + vec!["Test".to_string(), "File1.png".to_string()], + IndexSource::new(true, 1u32, 1u16), + LocalMappingForward::Version { version: 2u16 }, + ) + .unwrap(), + ) + .unwrap(); + sheet.unpack() + } + + fn verify_data(data_a: Self::DataType, data_b: Self::DataType) -> bool { + data_a == data_b + } +} -- cgit