Skip to main content

hypercall_db/traits/
snapshots.rs

1//! Snapshot persistence traits.
2//!
3//! Operations for persisting and loading instrument/portfolio snapshots
4//! and their associated stream offsets.
5
6use anyhow::Result;
7
8use crate::types::snapshots::{
9    InstrumentsSnapshotData, InstrumentsSnapshotInput, PortfolioSnapshotData,
10    PortfolioSnapshotInput,
11};
12
13/// Instruments snapshot persistence.
14pub trait InstrumentsSnapshotWriter: Send + Sync {
15    /// Write a complete instruments snapshot in a single transaction.
16    /// Returns the new snapshot ID.
17    fn write_instruments_snapshot_sync(&self, input: &InstrumentsSnapshotInput) -> Result<i64>;
18}
19
20/// Instruments snapshot loader.
21pub trait InstrumentsSnapshotReader: Send + Sync {
22    /// Load the latest instruments snapshot ID.
23    fn get_latest_instruments_snapshot_id_sync(&self) -> Result<Option<i64>>;
24
25    /// Load instruments snapshot data for a given snapshot ID.
26    fn load_instruments_snapshot_sync(&self, snapshot_id: i64) -> Result<InstrumentsSnapshotData>;
27}
28
29/// Portfolio snapshot persistence.
30pub trait PortfolioSnapshotWriter: Send + Sync {
31    /// Write a complete portfolio snapshot in a single transaction.
32    /// Returns the new snapshot ID.
33    fn write_portfolio_snapshot_sync(&self, input: &PortfolioSnapshotInput) -> Result<i64>;
34}
35
36/// Portfolio snapshot loader.
37pub trait PortfolioSnapshotReader: Send + Sync {
38    /// Load the latest portfolio snapshot ID.
39    fn get_latest_portfolio_snapshot_id_sync(&self) -> Result<Option<i64>>;
40
41    /// Check if a portfolio snapshot exists.
42    fn portfolio_snapshot_exists_sync(&self, snapshot_id: i64) -> Result<bool>;
43
44    /// Load portfolio snapshot data for a given snapshot ID.
45    fn load_portfolio_snapshot_sync(&self, snapshot_id: i64) -> Result<PortfolioSnapshotData>;
46}
47
48// Note: EngineCommandOffsetReader is not needed as a separate trait because
49// JournalReplayReader already provides get_next_engine_command_id_sync().
50// The portfolio snapshot task should use JournalReplayReader instead.