cloudiful_redactor/session/
store.rs1use 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}