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 #[serde(default)]
36 next_cursor: Option<String>,
37 /// Whether more entries are available.
38 #[serde(default)]
39 has_more: bool,
40 },
41}
42
43/// The type of a directory entry.
44#[derive(Debug, Clone, Deserialize)]
45pub enum DirEntryType {
46 /// A file.
47 #[serde(rename = "file")]
48 File,
49 /// A subdirectory.
50 #[serde(rename = "dir")]
51 Dir,
52}
53
54/// An entry within a directory listing.
55#[derive(Debug, Clone, Deserialize)]
56pub struct DirEntry {
57 /// Type of entry (`"file"` or `"dir"`).
58 #[serde(rename = "type")]
59 pub entry_type: DirEntryType,
60 /// Entry name.
61 pub name: String,
62 /// Entry path.
63 pub path: String,
64 /// Object SHA.
65 pub sha: String,
66 /// Size in bytes (files only).
67 pub size: Option<u64>,
68}