Skip to main content

tdn_storage/
file.rs

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}