khive_runtime/
engine_config_backend_disk_guard.rs1use super::*;
2
3impl BackendConfig {
4 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}