Skip to main content

cloudiful_redactor/session/
store.rs

1use anyhow::{Result, anyhow};
2
3use crate::RedactionSession;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct StoredSession {
7    pub session: RedactionSession,
8    pub version: Option<String>,
9}
10
11pub trait SessionStore: Send + Sync {
12    fn load_latest(&self, external_id: &str) -> Result<Option<StoredSession>>;
13    fn save_latest(
14        &self,
15        external_id: &str,
16        session: &RedactionSession,
17        expected_version: Option<&str>,
18    ) -> Result<Option<String>>;
19}
20
21pub fn require_external_id(external_id: Option<&str>) -> Result<&str> {
22    external_id
23        .filter(|value| !value.is_empty())
24        .ok_or_else(|| anyhow!("external_id is required for stateful session operations"))
25}