1use async_fs as fs;
2use std::path::PathBuf;
3
4use tdn_types::primitive::DEFAULT_STORAGE_DIR;
5type Result<T> = std::io::Result<T>;
6
7pub async fn read_local_file(name: &str) -> Result<Vec<u8>> {
8 let mut path = DEFAULT_STORAGE_DIR.clone();
9 path.push(name);
10 fs::read(path).await
11}
12
13pub async fn read_string_local_file(name: &str) -> Result<String> {
14 let mut path = DEFAULT_STORAGE_DIR.clone();
15 path.push(name);
16 fs::read_to_string(path).await
17}
18
19pub async fn write_local_file(name: &str, data: &[u8]) -> Result<()> {
20 let mut path = DEFAULT_STORAGE_DIR.clone();
21 path.push(name);
22 fs::write(path, data).await
23}
24
25pub async fn remove_local_file(name: &str) -> Result<()> {
26 let mut path = DEFAULT_STORAGE_DIR.clone();
27 path.push(name);
28 fs::remove_file(path).await
29}
30
31pub async fn read_absolute_file(path: &PathBuf) -> Result<Vec<u8>> {
32 fs::read(path).await
33}
34
35pub async fn read_string_absolute_file(path: &PathBuf) -> Result<String> {
36 fs::read_to_string(path).await
37}
38
39pub async fn write_absolute_file(path: &PathBuf, data: &[u8]) -> Result<()> {
40 fs::write(path, data).await
41}
42
43pub async fn remove_absolute_file(path: &PathBuf) -> Result<()> {
44 fs::remove_file(path).await
45}
46
47#[test]
48fn test_local_file() {
49 let name = "test.file";
50 let data = "A".to_owned();
51
52 smol::block_on(async {
53 write_local_file(name, data.as_bytes()).await.unwrap();
54 assert_eq!(
55 read_local_file(name).await.ok(),
56 Some(data.as_bytes().to_vec())
57 );
58 assert_eq!(read_string_local_file(name).await.ok(), Some(data));
59 remove_local_file(name).await.unwrap();
60 });
61}
62
63#[test]
64fn test_absolute_file() {
65 let name = "test.file";
66 let data = "A".to_owned();
67 let mut path = PathBuf::from("../");
68 path.push(name);
69
70 smol::block_on(async {
71 write_absolute_file(&path, data.as_bytes()).await.unwrap();
72 assert_eq!(
73 read_absolute_file(&path).await.ok(),
74 Some(data.as_bytes().to_vec())
75 );
76 assert_eq!(read_string_absolute_file(&path).await.ok(), Some(data));
77 remove_absolute_file(&path).await.unwrap();
78 });
79}