flams_backend_types/
archives.rs

1use ftml_ontology::utils::time::Timestamp;
2use ftml_uris::ArchiveId;
3
4#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[cfg_attr(feature = "typescript", derive(tsify::Tsify))]
7#[cfg_attr(feature = "typescript", tsify(into_wasm_abi, from_wasm_abi))]
8pub struct FileStateSummary {
9    pub new: u32,
10    pub stale: u32,
11    pub deleted: u32,
12    pub up_to_date: u32,
13    pub last_built: Timestamp,
14    pub last_changed: Timestamp,
15}
16impl Default for FileStateSummary {
17    fn default() -> Self {
18        Self {
19            new: 0,
20            stale: 0,
21            up_to_date: 0,
22            deleted: 0,
23            last_built: Timestamp::zero(),
24            last_changed: Timestamp::zero(),
25        }
26    }
27}
28impl FileStateSummary {
29    pub fn merge(&mut self, other: Self) {
30        self.new += other.new;
31        self.stale += other.stale;
32        self.deleted += other.deleted;
33        self.up_to_date += other.up_to_date;
34        self.last_built = self.last_built.max(other.last_built);
35        self.last_changed = self.last_changed.max(other.last_changed);
36    }
37}
38
39#[derive(Debug, Clone)]
40#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
41#[cfg_attr(feature = "typescript", derive(tsify::Tsify))]
42#[cfg_attr(feature = "typescript", tsify(into_wasm_abi, from_wasm_abi))]
43pub struct ArchiveData {
44    pub id: ArchiveId,
45    #[cfg_attr(feature = "serde", serde(default))]
46    pub git: Option<String>,
47    #[cfg_attr(feature = "serde", serde(default))]
48    pub summary: Option<FileStateSummary>,
49}
50
51#[derive(Debug, Clone)]
52#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
53#[cfg_attr(feature = "typescript", derive(tsify::Tsify))]
54#[cfg_attr(feature = "typescript", tsify(into_wasm_abi, from_wasm_abi))]
55pub struct ArchiveGroupData {
56    pub id: ArchiveId,
57    #[cfg_attr(feature = "serde", serde(default))]
58    pub summary: Option<FileStateSummary>,
59}
60
61#[derive(Debug, Clone)]
62#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
63#[cfg_attr(feature = "typescript", derive(tsify::Tsify))]
64#[cfg_attr(feature = "typescript", tsify(into_wasm_abi, from_wasm_abi))]
65pub struct DirectoryData {
66    pub rel_path: String,
67    #[cfg_attr(feature = "serde", serde(default))]
68    pub summary: Option<FileStateSummary>,
69}
70
71#[derive(Debug, Clone)]
72#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
73#[cfg_attr(feature = "typescript", derive(tsify::Tsify))]
74#[cfg_attr(feature = "typescript", tsify(into_wasm_abi, from_wasm_abi))]
75pub struct FileData {
76    pub rel_path: String,
77    pub format: String,
78}