1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
use std::path::PathBuf;
use asset_system::{
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;
}
}
|