flams_backend_types/
archives.rs1use 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}