1use sos_backend::AccessPoint;
3use sos_core::{commit::CommitState, events::Event, SecretId};
4use sos_login::PublicIdentity;
5use sos_vault::Summary;
6use std::sync::Arc;
7
8#[cfg(feature = "search")]
9use sos_search::SearchIndex;
10
11#[cfg(feature = "files")]
12use sos_external_files::FileMutationEvent;
13
14use serde::{Deserialize, Serialize};
15use tokio::sync::RwLock;
16
17#[cfg(feature = "clipboard")]
18use serde_json_path::JsonPath;
19
20#[cfg(feature = "clipboard")]
22#[typeshare::typeshare]
23#[derive(Debug, Serialize, Deserialize)]
24#[serde(
25 rename_all = "camelCase",
26 rename_all_fields = "camelCase",
27 tag = "kind",
28 content = "body"
29)]
30pub enum ClipboardTextFormat {
31 Date {
34 #[serde(rename = "formatDescription")]
38 format_description: String,
39 },
40}
41
42#[cfg(feature = "clipboard")]
44#[typeshare::typeshare]
45#[derive(Default, Debug, Serialize, Deserialize)]
46#[serde(default)]
47pub struct ClipboardCopyRequest {
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub paths: Option<Vec<JsonPath>>,
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub format: Option<ClipboardTextFormat>,
54}
55
56pub struct AccountChange<T> {
58 pub event: Event,
60 pub sync_result: T,
62}
63
64pub struct SecretChange<T> {
66 pub id: SecretId,
68 pub event: Event,
70 pub commit_state: CommitState,
73 pub folder: Summary,
75 pub sync_result: T,
77 #[cfg(feature = "files")]
79 pub file_events: Vec<FileMutationEvent>,
80}
81
82pub struct SecretInsert<T> {
84 pub results: Vec<SecretChange<T>>,
86 pub sync_result: T,
88}
89
90pub struct SecretMove<T> {
92 pub id: SecretId,
94 pub event: Event,
96 pub sync_result: T,
98 #[cfg(feature = "files")]
100 pub file_events: Vec<FileMutationEvent>,
101}
102
103pub struct SecretDelete<T> {
105 pub event: Event,
107 pub commit_state: CommitState,
110 pub folder: Summary,
112 pub sync_result: T,
114 #[cfg(feature = "files")]
116 pub file_events: Vec<FileMutationEvent>,
117}
118
119pub struct FolderCreate<T> {
121 pub folder: Summary,
123 pub event: Event,
125 pub commit_state: CommitState,
127 pub sync_result: T,
129}
130
131pub struct FolderChange<T> {
133 pub event: Event,
135 pub commit_state: CommitState,
137 pub sync_result: T,
139}
140
141pub struct FolderDelete<T> {
143 pub events: Vec<Event>,
145 pub commit_state: CommitState,
147 pub sync_result: T,
149}
150
151#[cfg(feature = "contacts")]
153pub enum ContactImportProgress {
154 Ready {
156 total: usize,
158 },
159 Item {
161 label: String,
163 index: usize,
165 },
166}
167
168pub struct DetachedView {
170 pub(crate) keeper: AccessPoint,
171 #[cfg(feature = "search")]
172 pub(crate) index: Arc<RwLock<SearchIndex>>,
173}
174
175impl DetachedView {
176 pub fn keeper(&self) -> &AccessPoint {
178 &self.keeper
179 }
180
181 #[cfg(feature = "search")]
183 pub fn index(&self) -> Arc<RwLock<SearchIndex>> {
184 Arc::clone(&self.index)
185 }
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
190pub struct AccountData {
191 #[serde(flatten)]
193 pub account: PublicIdentity,
194 pub identity: String,
196 pub folders: Vec<Summary>,
198 pub device_id: String,
200}