cloudiful-redactor 0.3.4

Structured text redaction with reversible sessions for secrets, domains, URLs, and related sensitive values.
Documentation
use anyhow::{Result, anyhow};

use crate::RedactionSession;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct StoredSession {
    pub session: RedactionSession,
    pub version: Option<String>,
}

pub trait SessionStore: Send + Sync {
    fn load_latest(&self, external_id: &str) -> Result<Option<StoredSession>>;
    fn save_latest(
        &self,
        external_id: &str,
        session: &RedactionSession,
        expected_version: Option<&str>,
    ) -> Result<Option<String>>;
}

pub fn require_external_id(external_id: Option<&str>) -> Result<&str> {
    external_id
        .filter(|value| !value.is_empty())
        .ok_or_else(|| anyhow!("external_id is required for stateful session operations"))
}