Skip to main content

bamboo_domain/session/
persistence.rs

1use std::io;
2use std::sync::Arc;
3
4use crate::session::types::Session;
5
6/// Port for runtime (non-authoritative) session persistence.
7///
8/// Implementors must:
9/// - Serialize concurrent saves per session ID.
10/// - Merge on-disk authoritative metadata (`title`, `pinned`, `title_version`,
11///   `metadata_version`) before writing, so UI edits are never clobbered.
12#[async_trait::async_trait]
13pub trait RuntimeSessionPersistence: Send + Sync {
14    /// Persist the session, merging any newer authoritative metadata from disk.
15    async fn save_runtime_session(&self, session: &mut Session) -> io::Result<()>;
16}
17
18#[async_trait::async_trait]
19impl<T: RuntimeSessionPersistence + ?Sized> RuntimeSessionPersistence for Arc<T> {
20    async fn save_runtime_session(&self, session: &mut Session) -> io::Result<()> {
21        (**self).save_runtime_session(session).await
22    }
23}