computer_protocol/
files.rs1use serde::{Deserialize, Serialize};
2
3pub const MAX_WRITE_BYTES: usize = 10 * 1024 * 1024;
5
6pub const MAX_IMAGE_BYTES: usize = 1024 * 1024;
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
11pub struct ListFilesRequest {
12 pub path: Option<String>,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
18#[serde(rename_all = "snake_case")]
19pub enum FileKind {
20 File,
21 Folder,
22 Symlink,
23 Other,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
28pub struct FileEntry {
29 pub name: String,
30 pub kind: FileKind,
31 pub size: u64,
33 pub modified: Option<String>,
35}
36
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
39pub struct ListFilesReply {
40 pub path: String,
42 pub entries: Vec<FileEntry>,
44 pub omitted: u64,
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
50pub struct ReadFileRequest {
51 pub path: String,
52 pub offset: Option<u64>,
54 pub limit: Option<u64>,
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
60#[serde(rename_all = "snake_case")]
61pub enum ImageType {
62 Png,
63 Jpeg,
64}
65
66impl ImageType {
67 #[must_use]
68 pub fn mime(self) -> &'static str {
69 match self {
70 Self::Png => "image/png",
71 Self::Jpeg => "image/jpeg",
72 }
73 }
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78#[serde(tag = "kind", rename_all = "snake_case")]
79pub enum ReadFileReply {
80 Text {
81 path: String,
83 text: String,
84 note: Option<String>,
86 },
87 Image {
88 path: String,
89 image_type: ImageType,
90 data_base64: String,
91 },
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
96pub struct WriteFileRequest {
97 pub path: String,
98 pub content: String,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
103pub struct WriteFileReply {
104 pub path: String,
106 pub bytes: u64,
107}