Skip to main content

khive_runtime/
engine_config_backend_disk_guard.rs

1use super::*;
2
3impl BackendConfig {
4    /// Resolve from the host's captured environment; never sample live environment here.
5    pub fn resolve_disk_guard(
6        &self,
7        environment: &khive_db::DiskGuardEnvironment,
8    ) -> Result<Option<khive_db::EffectiveDiskGuardConfig>, ConfigError> {
9        let invalid = |reason: String| ConfigError::InvalidBackendDiskGuard {
10            name: self.name.clone(),
11            reason,
12        };
13        if self.kind == BackendKind::Memory && self.disk_reserve_bytes.is_some_and(|n| n != 0) {
14            return Err(invalid(
15                "nonzero disk_reserve_bytes requires a file-backed SQLite backend".into(),
16            ));
17        }
18        if self
19            .disk_guard_deadline_ms
20            .is_some_and(|n| !(100..=10_000).contains(&n))
21        {
22            return Err(invalid(
23                "disk_guard_deadline_ms must be between 100 and 10000".into(),
24            ));
25        }
26        if self.kind == BackendKind::Memory || self.read_only {
27            return Ok(None);
28        }
29        environment
30            .resolve(self.disk_reserve_bytes, self.disk_guard_deadline_ms)
31            .map(Some)
32            .map_err(|e| invalid(e.to_string()))
33    }
34}