summaryrefslogtreecommitdiffstats
path: root/third_party/rust/sync15/src/engine/mod.rs
blob: ef3b7158eaca7fd22a46d16acf47277e8f4e48fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

//! This module is used by crates which need to implement a "sync engine".
//! At a high-level, a "sync engine" is code which knows how to take records
//! from a sync server, apply and reconcile them with the local data, then
//! provide records which should be uploaded to the server.
//!
//! Note that the "sync engine" does not itself talk to the server, nor does
//! it manage the state of the remote server, nor does it do any of the
//! encryption/decryption - that is the responsbility of the "sync client", as
//! implemented in the [client] module (or in some cases, implemented externally)
//!
//! There are currently 2 types of engine:
//! * Code which implements the [crate::engine::sync_engine::SyncEngine]
//!   trait. These are the "original" Rust engines, designed to be used with
//!   the [crate::client](sync client)
//! * Code which implements the [crate::engine::bridged_engine::BridgedEngine]
//!   trait. These engines are a "bridge" between the Desktop JS Sync world and
//!   this rust code.
//! While these engines end up doing the same thing, the difference is due to
//! implementation differences between the Desktop Sync client and the Rust
//! client.
//! We intend merging these engines - the first step will be to merge the
//! types and payload management used by these traits, then to combine the
//! requirements into a single trait that captures both use-cases.
mod bridged_engine;
mod changeset;
mod request;
mod sync_engine;

pub use bridged_engine::{ApplyResults, BridgedEngine};
pub use changeset::{IncomingChangeset, OutgoingChangeset};
pub use request::{CollectionRequest, RequestOrder};
pub use sync_engine::{CollSyncIds, EngineSyncAssociation, SyncEngine, SyncEngineId};