interstice_abi/host_calls/
file.rs1use serde::{Deserialize, Serialize};
2
3use crate::interstice_abi_macros::IntersticeType;
4
5#[derive(Debug, Serialize, Deserialize)]
6pub enum FileCall {
7 ReadFile(ReadFileRequest),
8 WriteFile(WriteFileRequest),
9 ListDir(ListDirRequest),
10 Metadata(MetadataRequest),
11 CreateDir(CreateDirRequest),
12 RemoveFile(RemoveFileRequest),
13 RemoveDir(RemoveDirRequest),
14 Rename(RenameRequest),
15 Copy(CopyRequest),
16}
17
18#[derive(Debug, Serialize, Deserialize)]
19pub struct ReadFileRequest {
20 pub path: String,
21}
22
23#[derive(Debug, Serialize, Deserialize)]
24pub enum ReadFileResponse {
25 Ok(Vec<u8>),
26 Err(String),
27}
28
29#[derive(Debug, Serialize, Deserialize)]
30pub struct WriteFileRequest {
31 pub path: String,
32 pub data: Vec<u8>,
33 pub append: bool,
34}
35
36#[derive(Debug, Serialize, Deserialize)]
37pub enum WriteFileResponse {
38 Ok,
39 Err(String),
40}
41
42#[derive(Debug, Serialize, Deserialize)]
43pub struct ListDirRequest {
44 pub path: String,
45}
46
47#[derive(Debug, Serialize, Deserialize)]
48pub enum ListDirResponse {
49 Ok(Vec<DirEntry>),
50 Err(String),
51}
52
53#[derive(Debug, Serialize, Deserialize)]
54pub struct MetadataRequest {
55 pub path: String,
56}
57
58#[derive(Debug, Serialize, Deserialize)]
59pub enum MetadataResponse {
60 Ok(FileMetadata),
61 Err(String),
62}
63
64#[derive(Debug, Serialize, Deserialize)]
65pub struct CreateDirRequest {
66 pub path: String,
67 pub recursive: bool,
68}
69
70#[derive(Debug, Serialize, Deserialize)]
71pub enum CreateDirResponse {
72 Ok,
73 Err(String),
74}
75
76#[derive(Debug, Serialize, Deserialize)]
77pub struct RemoveFileRequest {
78 pub path: String,
79}
80
81#[derive(Debug, Serialize, Deserialize)]
82pub enum RemoveFileResponse {
83 Ok,
84 Err(String),
85}
86
87#[derive(Debug, Serialize, Deserialize)]
88pub struct RemoveDirRequest {
89 pub path: String,
90 pub recursive: bool,
91}
92
93#[derive(Debug, Serialize, Deserialize)]
94pub enum RemoveDirResponse {
95 Ok,
96 Err(String),
97}
98
99#[derive(Debug, Serialize, Deserialize)]
100pub struct RenameRequest {
101 pub from: String,
102 pub to: String,
103}
104
105#[derive(Debug, Serialize, Deserialize)]
106pub enum RenameResponse {
107 Ok,
108 Err(String),
109}
110
111#[derive(Debug, Serialize, Deserialize)]
112pub struct CopyRequest {
113 pub from: String,
114 pub to: String,
115 pub recursive: bool,
116}
117
118#[derive(Debug, Serialize, Deserialize)]
119pub enum CopyResponse {
120 Ok,
121 Err(String),
122}
123
124#[derive(Debug, Serialize, Deserialize, Clone)]
125pub struct DirEntry {
126 pub name: String,
127 pub path: String,
128 pub file_type: FileType,
129}
130
131#[derive(Debug, Serialize, Deserialize, Clone)]
132pub struct FileMetadata {
133 pub file_type: FileType,
134 pub len: u64,
135 pub readonly: bool,
136 pub created: Option<u64>,
137 pub modified: Option<u64>,
138}
139
140#[derive(Debug, Serialize, Deserialize, Clone)]
141pub enum FileType {
142 File,
143 Directory,
144 Symlink,
145 Other,
146}
147
148#[derive(Debug, Deserialize, Serialize, IntersticeType, Clone)]
149pub enum FileEvent {
150 Created { path: String },
151 Modified { path: String },
152 Deleted { path: String },
153 Renamed { from: String, to: String },
154}