places/bookmark_sync/
mod.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5pub mod engine;
6mod incoming;
7pub mod record;
8
9#[cfg(test)]
10mod tests;
11
12use crate::error::*;
13pub use engine::BookmarksSyncEngine;
14use rusqlite::types::{ToSql, ToSqlOutput};
15use rusqlite::Result as RusqliteResult;
16
17/// Synced item kinds. These are stored in `moz_bookmarks_synced.kind` and match
18/// the definitions in `mozISyncedBookmarksMerger`.
19#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
20#[repr(u8)]
21pub enum SyncedBookmarkKind {
22    Bookmark = 1,  // KIND_BOOKMARK
23    Query = 2,     // KIND_QUERY
24    Folder = 3,    // KIND_FOLDER
25    Livemark = 4,  // KIND_LIVEMARK
26    Separator = 5, // KIND_SEPARATOR
27}
28
29impl SyncedBookmarkKind {
30    #[inline]
31    pub fn from_u8(v: u8) -> Result<Self> {
32        match v {
33            1 => Ok(SyncedBookmarkKind::Bookmark),
34            2 => Ok(SyncedBookmarkKind::Query),
35            3 => Ok(SyncedBookmarkKind::Folder),
36            4 => Ok(SyncedBookmarkKind::Livemark),
37            5 => Ok(SyncedBookmarkKind::Separator),
38            _ => Err(Error::UnsupportedSyncedBookmarkKind(v)),
39        }
40    }
41}
42
43impl From<SyncedBookmarkKind> for dogear::Kind {
44    #[inline]
45    fn from(kind: SyncedBookmarkKind) -> dogear::Kind {
46        match kind {
47            SyncedBookmarkKind::Bookmark => dogear::Kind::Bookmark,
48            SyncedBookmarkKind::Query => dogear::Kind::Query,
49            SyncedBookmarkKind::Folder => dogear::Kind::Folder,
50            SyncedBookmarkKind::Livemark => dogear::Kind::Livemark,
51            SyncedBookmarkKind::Separator => dogear::Kind::Separator,
52        }
53    }
54}
55
56impl From<dogear::Kind> for SyncedBookmarkKind {
57    #[inline]
58    fn from(kind: dogear::Kind) -> SyncedBookmarkKind {
59        match kind {
60            dogear::Kind::Bookmark => SyncedBookmarkKind::Bookmark,
61            dogear::Kind::Query => SyncedBookmarkKind::Query,
62            dogear::Kind::Folder => SyncedBookmarkKind::Folder,
63            dogear::Kind::Livemark => SyncedBookmarkKind::Livemark,
64            dogear::Kind::Separator => SyncedBookmarkKind::Separator,
65        }
66    }
67}
68
69impl ToSql for SyncedBookmarkKind {
70    #[inline]
71    fn to_sql(&self) -> RusqliteResult<ToSqlOutput<'_>> {
72        Ok(ToSqlOutput::from(*self as u8))
73    }
74}
75
76/// Synced item validity states. These are stored in
77/// `moz_bookmarks_synced.validity`, and match the definitions in
78/// `mozISyncedBookmarksMerger`. In short:
79/// * `Valid` means the record is valid and should be merged as usual.
80/// * `Reupload` means a remote item can be fixed up and applied,
81///   and should be reuploaded.
82/// * `Replace` means a remote item isn't valid at all, and should either be
83///   replaced with a valid local copy, or deleted if a valid local copy
84///   doesn't exist.
85#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
86#[repr(u8)]
87pub enum SyncedBookmarkValidity {
88    Valid = 1,    // VALIDITY_VALID
89    Reupload = 2, // VALIDITY_REUPLOAD
90    Replace = 3,  // VALIDITY_REPLACE
91}
92
93impl SyncedBookmarkValidity {
94    #[inline]
95    pub fn from_u8(v: u8) -> Result<Self> {
96        match v {
97            1 => Ok(SyncedBookmarkValidity::Valid),
98            2 => Ok(SyncedBookmarkValidity::Reupload),
99            3 => Ok(SyncedBookmarkValidity::Replace),
100            _ => Err(Error::UnsupportedSyncedBookmarkValidity(v)),
101        }
102    }
103}
104
105impl From<SyncedBookmarkValidity> for dogear::Validity {
106    fn from(validity: SyncedBookmarkValidity) -> dogear::Validity {
107        match validity {
108            SyncedBookmarkValidity::Valid => dogear::Validity::Valid,
109            SyncedBookmarkValidity::Reupload => dogear::Validity::Reupload,
110            SyncedBookmarkValidity::Replace => dogear::Validity::Replace,
111        }
112    }
113}
114
115impl ToSql for SyncedBookmarkValidity {
116    fn to_sql(&self) -> RusqliteResult<ToSqlOutput<'_>> {
117        Ok(ToSqlOutput::from(*self as u8))
118    }
119}