use std::collections::{BTreeMap, BTreeSet}; use serde::{Deserialize, Serialize}; #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct ScanResponse { pub browsers: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct BrowserView { pub browser_id: String, pub browser_family_id: Option, pub browser_name: String, pub icon_key: Option, pub data_root: String, pub profiles: Vec, pub extensions: Vec, pub bookmarks: Vec, pub password_sites: Vec, pub stats: BrowserStats, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct BrowserStats { pub profile_count: usize, pub extension_count: usize, pub bookmark_count: usize, pub password_site_count: usize, pub history_cleanup_profile_count: usize, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct ProfileSummary { pub id: String, pub name: String, pub email: Option, pub avatar_data_url: Option, pub avatar_icon: Option, pub default_avatar_fill_color: Option, pub default_avatar_stroke_color: Option, pub avatar_label: String, pub path: String, pub history_cleanup: HistoryCleanupSummary, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct ExtensionSummary { pub id: String, pub name: String, pub version: Option, pub icon_data_url: Option, pub profile_ids: Vec, pub profiles: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct BookmarkSummary { pub url: String, pub title: String, pub profile_ids: Vec, pub profiles: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct PasswordSiteSummary { pub url: String, pub domain: String, pub profile_ids: Vec, pub profiles: Vec, } #[derive(Serialize, Clone)] #[serde(rename_all = "camelCase")] pub struct HistoryCleanupSummary { pub history: CleanupFileStatus, pub top_sites: CleanupFileStatus, pub visited_links: CleanupFileStatus, pub sessions: CleanupFileStatus, } #[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub enum CleanupFileStatus { Found, Missing, } #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CleanupHistoryInput { pub browser_id: String, pub profile_ids: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct CleanupHistoryResponse { pub results: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct CleanupHistoryResult { pub profile_id: String, pub deleted_files: Vec, pub skipped_files: Vec, pub error: Option, } #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RemoveExtensionsInput { pub browser_id: String, pub removals: Vec, } #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RemoveBookmarksInput { pub browser_id: String, pub removals: Vec, } #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ExtensionRemovalRequest { pub extension_id: String, pub profile_ids: Vec, } #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct BookmarkRemovalRequest { pub url: String, pub profile_ids: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct RemoveExtensionsResponse { pub results: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct RemoveBookmarksResponse { pub results: Vec, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct RemoveExtensionResult { pub extension_id: String, pub profile_id: String, pub removed_files: Vec, pub skipped_files: Vec, pub error: Option, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct RemoveBookmarkResult { pub url: String, pub profile_id: String, pub removed_count: usize, pub removed_files: Vec, pub skipped_files: Vec, pub error: Option, } #[derive(Serialize, Clone)] #[serde(rename_all = "camelCase")] pub struct AssociatedProfileSummary { pub id: String, pub name: String, pub avatar_data_url: Option, pub avatar_icon: Option, pub default_avatar_fill_color: Option, pub default_avatar_stroke_color: Option, pub avatar_label: String, } #[derive(Serialize, Clone)] #[serde(rename_all = "camelCase")] pub struct ExtensionAssociatedProfileSummary { pub id: String, pub name: String, pub avatar_data_url: Option, pub avatar_icon: Option, pub default_avatar_fill_color: Option, pub default_avatar_stroke_color: Option, pub avatar_label: String, pub install_source: ExtensionInstallSourceSummary, } #[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub enum ExtensionInstallSourceSummary { Store, External, } #[derive(Serialize, Clone)] #[serde(rename_all = "camelCase")] pub struct BookmarkAssociatedProfileSummary { pub id: String, pub name: String, pub avatar_data_url: Option, pub avatar_icon: Option, pub default_avatar_fill_color: Option, pub default_avatar_stroke_color: Option, pub avatar_label: String, pub bookmark_path: String, } #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct BrowserConfigListResponse { pub configs: Vec, } #[derive(Serialize, Clone)] #[serde(rename_all = "camelCase")] pub struct BrowserConfigEntry { pub id: String, pub source: BrowserConfigSource, pub browser_family_id: Option, pub icon_key: Option, pub name: String, pub executable_path: String, pub user_data_path: String, pub deletable: bool, } #[derive(Serialize, Clone)] #[serde(rename_all = "camelCase")] pub enum BrowserConfigSource { Default, Custom, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] pub struct CreateCustomBrowserConfigInput { pub name: String, pub icon_key: Option, pub executable_path: String, pub user_data_path: String, } #[derive(Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct StoredBrowserConfigs { pub custom_configs: Vec, } #[derive(Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct CustomBrowserConfigRecord { pub id: String, pub name: String, #[serde(default)] pub icon_key: Option, #[serde(default)] pub browser_family_id: Option, pub executable_path: String, pub user_data_path: String, } pub struct BrowserDefinition { pub id: &'static str, pub name: &'static str, pub local_app_data_segments: &'static [&'static str], pub executable_candidates: &'static [crate::browsers::ExecutableCandidate], } pub struct TempExtension { pub id: String, pub name: String, pub version: Option, pub icon_data_url: Option, pub profile_ids: BTreeSet, pub profiles: BTreeMap, } pub struct TempBookmark { pub url: String, pub title: String, pub profile_ids: BTreeSet, pub profiles: BTreeMap, } pub struct TempPasswordSite { pub url: String, pub domain: String, pub profile_ids: BTreeSet, pub profiles: BTreeMap, }