systemprompt_sync/models/
local_sync.rs1use chrono::{DateTime, Utc};
2use serde::Serialize;
3
4#[derive(Clone, Copy, Debug, PartialEq, Eq)]
5pub enum LocalSyncDirection {
6 ToDisk,
7 ToDatabase,
8}
9
10#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize)]
11pub enum DiffStatus {
12 Added,
13 Removed,
14 Modified,
15}
16
17#[derive(Clone, Debug, Serialize)]
18pub struct ContentDiffItem {
19 pub slug: String,
20 pub source_id: String,
21 pub status: DiffStatus,
22 pub disk_hash: Option<String>,
23 pub db_hash: Option<String>,
24 pub disk_updated_at: Option<DateTime<Utc>>,
25 pub db_updated_at: Option<DateTime<Utc>>,
26 pub title: Option<String>,
27}
28
29#[derive(Clone, Debug, Serialize)]
30pub struct SkillDiffItem {
31 pub skill_id: String,
32 pub file_path: String,
33 pub status: DiffStatus,
34 pub disk_hash: Option<String>,
35 pub db_hash: Option<String>,
36 pub name: Option<String>,
37}
38
39#[derive(Clone, Debug, Default, Serialize)]
40pub struct ContentDiffResult {
41 pub source_id: String,
42 pub added: Vec<ContentDiffItem>,
43 pub removed: Vec<ContentDiffItem>,
44 pub modified: Vec<ContentDiffItem>,
45 pub unchanged: usize,
46}
47
48impl ContentDiffResult {
49 pub fn has_changes(&self) -> bool {
50 !self.added.is_empty() || !self.removed.is_empty() || !self.modified.is_empty()
51 }
52}
53
54#[derive(Clone, Debug, Default, Serialize)]
55pub struct SkillsDiffResult {
56 pub added: Vec<SkillDiffItem>,
57 pub removed: Vec<SkillDiffItem>,
58 pub modified: Vec<SkillDiffItem>,
59 pub unchanged: usize,
60}
61
62impl SkillsDiffResult {
63 pub fn has_changes(&self) -> bool {
64 !self.added.is_empty() || !self.removed.is_empty() || !self.modified.is_empty()
65 }
66}
67
68#[derive(Clone, Debug, Default, Serialize)]
69pub struct LocalSyncResult {
70 pub items_synced: usize,
71 pub items_skipped: usize,
72 pub items_deleted: usize,
73 pub errors: Vec<String>,
74 pub direction: String,
75}
76
77#[derive(Debug)]
78pub struct DiskContent {
79 pub slug: String,
80 pub title: String,
81 pub body: String,
82}
83
84#[derive(Debug)]
85pub struct DiskSkill {
86 pub skill_id: String,
87 pub name: String,
88 pub description: String,
89 pub instructions: String,
90 pub file_path: String,
91}
92
93#[derive(Clone, Debug, Serialize)]
94pub struct PlaybookDiffItem {
95 pub playbook_id: String,
96 pub file_path: String,
97 pub category: String,
98 pub domain: String,
99 pub status: DiffStatus,
100 pub disk_hash: Option<String>,
101 pub db_hash: Option<String>,
102 pub name: Option<String>,
103}
104
105#[derive(Clone, Debug, Default, Serialize)]
106pub struct PlaybooksDiffResult {
107 pub added: Vec<PlaybookDiffItem>,
108 pub removed: Vec<PlaybookDiffItem>,
109 pub modified: Vec<PlaybookDiffItem>,
110 pub unchanged: usize,
111}
112
113impl PlaybooksDiffResult {
114 pub fn has_changes(&self) -> bool {
115 !self.added.is_empty() || !self.removed.is_empty() || !self.modified.is_empty()
116 }
117}
118
119#[derive(Debug)]
120pub struct DiskPlaybook {
121 pub playbook_id: String,
122 pub name: String,
123 pub description: String,
124 pub instructions: String,
125 pub category: String,
126 pub domain: String,
127 pub file_path: String,
128}