interstice_sdk_core/host_calls/
file.rs1use crate::host_calls::{host_call, unpack};
2use interstice_abi::{
3 CopyRequest, CopyResponse, CreateDirRequest, CreateDirResponse, DirEntry, FileCall, HostCall,
4 ListDirRequest, ListDirResponse, MetadataRequest, MetadataResponse, ReadFileRequest,
5 ReadFileResponse, RemoveDirRequest, RemoveDirResponse, RemoveFileRequest, RemoveFileResponse,
6 RenameRequest, RenameResponse, WriteFileRequest, WriteFileResponse, FileMetadata,
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 { path })));
63 let response: RemoveFileResponse = unpack(pack);
64 match response {
65 RemoveFileResponse::Ok => Ok(()),
66 RemoveFileResponse::Err(err) => Err(err),
67 }
68}
69
70pub fn remove_dir(path: String, recursive: bool) -> Result<(), String> {
71 let pack = host_call(HostCall::File(FileCall::RemoveDir(RemoveDirRequest {
72 path,
73 recursive,
74 })));
75 let response: RemoveDirResponse = unpack(pack);
76 match response {
77 RemoveDirResponse::Ok => Ok(()),
78 RemoveDirResponse::Err(err) => Err(err),
79 }
80}
81
82pub fn rename(from: String, to: String) -> Result<(), String> {
83 let pack = host_call(HostCall::File(FileCall::Rename(RenameRequest { from, to })));
84 let response: RenameResponse = unpack(pack);
85 match response {
86 RenameResponse::Ok => Ok(()),
87 RenameResponse::Err(err) => Err(err),
88 }
89}
90
91pub fn copy(from: String, to: String, recursive: bool) -> Result<(), String> {
92 let pack = host_call(HostCall::File(FileCall::Copy(CopyRequest {
93 from,
94 to,
95 recursive,
96 })));
97 let response: CopyResponse = unpack(pack);
98 match response {
99 CopyResponse::Ok => Ok(()),
100 CopyResponse::Err(err) => Err(err),
101 }
102}
103
104pub struct File;
105
106impl File {
107 pub fn read(&self, path: String) -> Result<Vec<u8>, String> {
108 read_file(path)
109 }
110
111 pub fn write(&self, path: String, data: Vec<u8>, append: bool) -> Result<(), String> {
112 write_file(path, data, append)
113 }
114
115 pub fn list_dir(&self, path: String) -> Result<Vec<DirEntry>, String> {
116 list_dir(path)
117 }
118
119 pub fn metadata(&self, path: String) -> Result<FileMetadata, String> {
120 metadata(path)
121 }
122
123 pub fn create_dir(&self, path: String, recursive: bool) -> Result<(), String> {
124 create_dir(path, recursive)
125 }
126
127 pub fn remove_file(&self, path: String) -> Result<(), String> {
128 remove_file(path)
129 }
130
131 pub fn remove_dir(&self, path: String, recursive: bool) -> Result<(), String> {
132 remove_dir(path, recursive)
133 }
134
135 pub fn rename(&self, from: String, to: String) -> Result<(), String> {
136 rename(from, to)
137 }
138
139 pub fn copy(&self, from: String, to: String, recursive: bool) -> Result<(), String> {
140 copy(from, to, recursive)
141 }
142}