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_skipped_modified: usize,
73 pub items_deleted: usize,
74 pub errors: Vec<String>,
75 pub direction: String,
76}
77
78#[derive(Debug)]
79pub struct DiskContent {
80 pub slug: String,
81 pub title: String,
82 pub body: String,
83}
84
85#[derive(Debug)]
86pub struct DiskSkill {
87 pub skill_id: String,
88 pub name: String,
89 pub description: String,
90 pub instructions: String,
91 pub file_path: String,
92}
93
94#[derive(Clone, Debug, Serialize)]
95pub struct PlaybookDiffItem {
96 pub playbook_id: String,
97 pub file_path: String,
98 pub category: String,
99 pub domain: String,
100 pub status: DiffStatus,
101 pub disk_hash: Option<String>,
102 pub db_hash: Option<String>,
103 pub name: Option<String>,
104}
105
106#[derive(Clone, Debug, Default, Serialize)]
107pub struct PlaybooksDiffResult {
108 pub added: Vec<PlaybookDiffItem>,
109 pub removed: Vec<PlaybookDiffItem>,
110 pub modified: Vec<PlaybookDiffItem>,
111 pub unchanged: usize,
112}
113
114impl PlaybooksDiffResult {
115 pub fn has_changes(&self) -> bool {
116 !self.added.is_empty() || !self.removed.is_empty() || !self.modified.is_empty()
117 }
118}
119
120#[derive(Debug)]
121pub struct DiskPlaybook {
122 pub playbook_id: String,
123 pub name: String,
124 pub description: String,
125 pub instructions: String,
126 pub category: String,
127 pub domain: String,
128 pub file_path: String,
129}