Skip to main content

interstice_abi/host_calls/
file.rs

1use 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}