mesa_dev/models/content.rs
1//! Content models.
2
3use serde::Deserialize;
4
5/// Repository content — either a file or a directory.
6#[derive(Debug, Clone, Deserialize)]
7#[serde(tag = "type", rename_all = "lowercase")]
8pub enum Content {
9 /// A file entry.
10 File {
11 /// File name.
12 name: String,
13 /// File path.
14 path: String,
15 /// Object SHA.
16 sha: String,
17 /// File size in bytes.
18 size: u64,
19 /// Content encoding (e.g. `"base64"`).
20 encoding: String,
21 /// Encoded file content.
22 content: String,
23 },
24 /// A directory entry.
25 Dir {
26 /// Directory name.
27 name: String,
28 /// Directory path.
29 path: String,
30 /// Object SHA.
31 sha: String,
32 /// Directory entries.
33 entries: Vec<DirEntry>,
34 /// Cursor for the next page of entries.
35 next_cursor: Option<String>,
36 /// Whether more entries are available.
37 has_more: bool,
38 },
39}
40
41/// The type of a directory entry.
42#[derive(Debug, Clone, Deserialize)]
43pub enum DirEntryType {
44 /// A file.
45 #[serde(rename = "file")]
46 File,
47 /// A subdirectory.
48 #[serde(rename = "dir")]
49 Dir,
50}
51
52/// An entry within a directory listing.
53#[derive(Debug, Clone, Deserialize)]
54pub struct DirEntry {
55 /// Type of entry (`"file"` or `"dir"`).
56 #[serde(rename = "type")]
57 pub entry_type: DirEntryType,
58 /// Entry name.
59 pub name: String,
60 /// Entry path.
61 pub path: String,
62 /// Object SHA.
63 pub sha: String,
64 /// Size in bytes (files only).
65 pub size: Option<u64>,
66}