summaryrefslogtreecommitdiff
path: root/systems/asset/test
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-02-07 18:08:42 +0800
committer魏曹先生 <1992414357@qq.com>2026-02-07 18:08:42 +0800
commit4f184a439056d2b5dff7aa2fa1b1a73a1cbe9582 (patch)
tree9d458e89ca8630dd402eec9dd519e333ed668fb3 /systems/asset/test
parentf0001b45f91e7889c7060e45ac6c740401f7acb3 (diff)
Add asset system with file locking and atomic writes
Diffstat (limited to 'systems/asset/test')
-rw-r--r--systems/asset/test/Cargo.toml9
-rw-r--r--systems/asset/test/src/lib.rs53
2 files changed, 62 insertions, 0 deletions
diff --git a/systems/asset/test/Cargo.toml b/systems/asset/test/Cargo.toml
new file mode 100644
index 0000000..07c6282
--- /dev/null
+++ b/systems/asset/test/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "asset_test"
+version.workspace = true
+edition = "2024"
+
+[dependencies]
+asset = { path = "../" }
+
+tokio = { version = "1.48.0", features = ["full"] }
diff --git a/systems/asset/test/src/lib.rs b/systems/asset/test/src/lib.rs
new file mode 100644
index 0000000..79a840d
--- /dev/null
+++ b/systems/asset/test/src/lib.rs
@@ -0,0 +1,53 @@
+use std::path::PathBuf;
+
+use asset::{
+ RWDataTest, ensure_eq,
+ error::{DataReadError, DataWriteError},
+ rw::RWData,
+};
+
+#[derive(RWDataTest)]
+pub struct FooData {
+ pub age: i32,
+ pub name: String,
+}
+
+impl RWData<FooData> for FooData {
+ type DataType = FooData;
+
+ async fn read(path: &PathBuf) -> Result<FooData, DataReadError> {
+ let content = tokio::fs::read_to_string(path)
+ .await
+ .map_err(|e| DataReadError::IoError(e))?;
+ let parts: Vec<&str> = content.split('=').collect();
+ if parts.len() != 2 {
+ return Err(DataReadError::ParseError("Invalid format".to_string()));
+ }
+ let name = parts[0].to_string();
+ let age: i32 = parts[1]
+ .parse()
+ .map_err(|_| DataReadError::ParseError("Invalid age".to_string()))?;
+ Ok(FooData { age, name })
+ }
+
+ async fn write(data: FooData, path: &PathBuf) -> Result<(), DataWriteError> {
+ let content = format!("{}={}", data.name, data.age);
+ tokio::fs::write(path, content)
+ .await
+ .map_err(|e| DataWriteError::IoError(e))?;
+ Ok(())
+ }
+
+ fn test_data() -> FooData {
+ FooData {
+ age: 24,
+ name: "OneOneFourFiveOneFour".to_string(),
+ }
+ }
+
+ fn verify_data(data_a: FooData, data_b: FooData) -> bool {
+ ensure_eq!(data_a.age, data_b.age);
+ ensure_eq!(data_a.name, data_b.name);
+ return true;
+ }
+}