Skip to main content

systemprompt_runtime/startup_validation/
files_validator.rs

1//! Domain validator that enforces the `files` subsystem is initialised.
2
3use systemprompt_files::FilesConfig;
4use systemprompt_traits::validation_report::ValidationError;
5use systemprompt_traits::{ConfigProvider, ValidationReport};
6
7#[derive(Debug, Default, Clone, Copy)]
8pub struct FilesConfigValidator {
9    initialized: bool,
10}
11
12impl FilesConfigValidator {
13    pub fn new() -> Self {
14        Self::default()
15    }
16}
17
18impl systemprompt_traits::DomainConfig for FilesConfigValidator {
19    fn domain_id(&self) -> &'static str {
20        "files"
21    }
22
23    fn priority(&self) -> u32 {
24        5
25    }
26
27    fn load(
28        &mut self,
29        _config: &dyn ConfigProvider,
30    ) -> Result<(), systemprompt_traits::DomainConfigError> {
31        self.initialized = FilesConfig::get_optional().is_some();
32        Ok(())
33    }
34
35    fn validate(&self) -> Result<ValidationReport, systemprompt_traits::DomainConfigError> {
36        let mut report = ValidationReport::new("files");
37
38        let Some(files_config) = FilesConfig::get_optional() else {
39            return Ok(report);
40        };
41
42        let errors = files_config.ensure_storage_structure();
43        for error_msg in errors {
44            report.add_error(
45                ValidationError::new("storage", &error_msg)
46                    .with_suggestion("Check filesystem permissions for storage directory"),
47            );
48        }
49
50        Ok(report)
51    }
52}