interstice_sdk_core/host_calls/
file.rs1use crate::host_calls::{host_call, unpack};
2use interstice_abi::{
3 CopyRequest, CopyResponse, CreateDirRequest, CreateDirResponse, DirEntry, FileCall,
4 FileMetadata, HostCall, ListDirRequest, ListDirResponse, MetadataRequest, MetadataResponse,
5 ReadFileRequest, ReadFileResponse, RemoveDirRequest, RemoveDirResponse, RemoveFileRequest,
6 RemoveFileResponse, RenameRequest, RenameResponse, WriteFileRequest, WriteFileResponse,
7};
8
9pub fn read_file(path: String) -> Result<Vec<u8>, String> {
10 let pack = host_call(HostCall::File(FileCall::ReadFile(ReadFileRequest { path })));
11 let response: ReadFileResponse = unpack(pack);
12 match response {
13 ReadFileResponse::Ok(data) => Ok(data),
14 ReadFileResponse::Err(err) => Err(err),
15 }
16}
17
18pub fn write_file(path: String, data: Vec<u8>, append: bool) -> Result<(), String> {
19 let pack = host_call(HostCall::File(FileCall::WriteFile(WriteFileRequest {
20 path,
21 data,
22 append,
23 })));
24 let response: WriteFileResponse = unpack(pack);
25 match response {
26 WriteFileResponse::Ok => Ok(()),
27 WriteFileResponse::Err(err) => Err(err),
28 }
29}
30
31pub fn list_dir(path: String) -> Result<Vec<DirEntry>, String> {
32 let pack = host_call(HostCall::File(FileCall::ListDir(ListDirRequest { path })));
33 let response: ListDirResponse = unpack(pack);
34 match response {
35 ListDirResponse::Ok(entries) => Ok(entries),
36 ListDirResponse::Err(err) => Err(err),
37 }
38}
39
40pub fn metadata(path: String) -> Result<FileMetadata, String> {
41 let pack = host_call(HostCall::File(FileCall::Metadata(MetadataRequest { path })));
42 let response: MetadataResponse = unpack(pack);
43 match response {
44 MetadataResponse::Ok(meta) => Ok(meta),
45 MetadataResponse::Err(err) => Err(err),
46 }
47}
48
49pub fn create_dir(path: String, recursive: bool) -> Result<(), String> {
50 let pack = host_call(HostCall::File(FileCall::CreateDir(CreateDirRequest {
51 path,
52 recursive,
53 })));
54 let response: CreateDirResponse = unpack(pack);
55 match response {
56 CreateDirResponse::Ok => Ok(()),
57 CreateDirResponse::Err(err) => Err(err),
58 }
59}
60
61pub fn remove_file(path: String) -> Result<(), String> {
62 let pack = host_call(HostCall::File(FileCall::RemoveFile(RemoveFileRequest {
63 path,
64 })));
65 let response: RemoveFileResponse = unpack(pack);
66 match response {
67 RemoveFileResponse::Ok => Ok(()),
68 RemoveFileResponse::Err(err) => Err(err),
69 }
70}
71
72pub fn remove_dir(path: String, recursive: bool) -> Result<(), String> {
73 let pack = host_call(HostCall::File(FileCall::RemoveDir(RemoveDirRequest {
74 path,
75 recursive,
76 })));
77 let response: RemoveDirResponse = unpack(pack);
78 match response {
79 RemoveDirResponse::Ok => Ok(()),
80 RemoveDirResponse::Err(err) => Err(err),
81 }
82}
83
84pub fn rename(from: String, to: String) -> Result<(), String> {
85 let pack = host_call(HostCall::File(FileCall::Rename(RenameRequest { from, to })));
86 let response: RenameResponse = unpack(pack);
87 match response {
88 RenameResponse::Ok => Ok(()),
89 RenameResponse::Err(err) => Err(err),
90 }
91}
92
93pub fn copy(from: String, to: String, recursive: bool) -> Result<(), String> {
94 let pack = host_call(HostCall::File(FileCall::Copy(CopyRequest {
95 from,
96 to,
97 recursive,
98 })));
99 let response: CopyResponse = unpack(pack);
100 match response {
101 CopyResponse::Ok => Ok(()),
102 CopyResponse::Err(err) => Err(err),
103 }
104}
105
106pub struct File;
107
108impl File {
109 pub fn read(&self, path: String) -> Result<Vec<u8>, String> {
110 read_file(path)
111 }
112
113 pub fn write(&self, path: String, data: Vec<u8>, append: bool) -> Result<(), String> {
114 write_file(path, data, append)
115 }
116
117 pub fn list_dir(&self, path: String) -> Result<Vec<DirEntry>, String> {
118 list_dir(path)
119 }
120
121 pub fn metadata(&self, path: String) -> Result<FileMetadata, String> {
122 metadata(path)
123 }
124
125 pub fn create_dir(&self, path: String, recursive: bool) -> Result<(), String> {
126 create_dir(path, recursive)
127 }
128
129 pub fn remove_file(&self, path: String) -> Result<(), String> {
130 remove_file(path)
131 }
132
133 pub fn remove_dir(&self, path: String, recursive: bool) -> Result<(), String> {
134 remove_dir(path, recursive)
135 }
136
137 pub fn rename(&self, from: String, to: String) -> Result<(), String> {
138 rename(from, to)
139 }
140
141 pub fn copy(&self, from: String, to: String, recursive: bool) -> Result<(), String> {
142 copy(from, to, recursive)
143 }
144}