Skip to main content

systemprompt_runtime/startup_validation/
files_validator.rs

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