arminius_lib_sync/syncv4/execute/
mod.rs1mod fetch;
8mod persist;
9
10use std::collections::{BTreeMap, HashMap};
11
12use arminius_lib_db::TransactedDb;
13use ruma::{OwnedRoomId, api::client::sync::sync_events};
14
15use crate::syncv4::{error::SyncV4Error, plan};
16
17#[derive(Debug)]
20pub struct Persisted {
21 pub(crate) pos: String,
23
24 pub(crate) lists_counts: HashMap<String, usize>,
26
27 pub(crate) rooms: BTreeMap<OwnedRoomId, sync_events::v5::response::Room>,
29}
30
31pub(super) async fn execute(
33 mut transaction: TransactedDb<'_>,
34 plan: plan::SyncV4Plan,
35) -> Result<Persisted, SyncV4Error> {
36 let fetched = fetch::fetch(&mut transaction, &plan).await?;
37
38 persist::persist(transaction, plan, Some(fetched)).await
39}
40
41pub(super) async fn persist_without_position(
43 transaction: TransactedDb<'_>,
44 plan: plan::SyncV4Plan,
45) -> Result<Persisted, SyncV4Error> {
46 persist::persist(transaction, plan, None).await
47}