Skip to main content

commonware_storage/qmdb/sync/
mod.rs

1//! Shared sync types and functionality for authenticated databases.
2
3use crate::qmdb::sync::engine::Config;
4use commonware_codec::Encode;
5
6pub mod engine;
7pub(crate) use engine::Engine;
8
9mod error;
10pub use error::{EngineError, Error};
11
12mod gaps;
13mod journal;
14
15pub(crate) use journal::Journal;
16
17mod database;
18pub(crate) use database::{Config as DatabaseConfig, Database};
19
20pub mod resolver;
21pub(crate) use resolver::{FetchResult, Resolver};
22
23mod target;
24pub use target::Target;
25
26pub mod compact;
27mod requests;
28
29/// A [`Resolver`] whose associated types match a specific `Database`.
30///
31/// Blanket-impled for any matching `Resolver`, so callers never implement this directly.
32pub trait DbResolver<DB: Database>:
33    Resolver<Family = DB::Family, Op = DB::Op, Digest = DB::Digest>
34{
35}
36
37impl<DB, R> DbResolver<DB> for R
38where
39    DB: Database,
40    R: Resolver<Family = DB::Family, Op = DB::Op, Digest = DB::Digest>,
41{
42}
43
44/// Create/open a database and sync it to a target state
45pub async fn sync<DB, R>(
46    config: Config<DB, R>,
47) -> Result<DB, Error<DB::Family, R::Error, DB::Digest>>
48where
49    DB: Database,
50    DB::Op: Encode,
51    R: DbResolver<DB>,
52{
53    Box::pin(Engine::new(config).await?.sync()).await
54}