Skip to main content

systemprompt_provider_contracts/web_config/
paths.rs

1//! Filesystem-path configuration for templates, assets, and content.
2
3use std::path::Path;
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct PathsConfig {
9    pub templates: String,
10    pub assets: String,
11    #[serde(default)]
12    pub css_url_prefix: Option<String>,
13}
14
15impl PathsConfig {
16    pub fn resolve_relative_to(&mut self, base: &Path) {
17        self.templates = resolve_path(base, &self.templates);
18    }
19}
20
21fn resolve_path(base: &Path, path: &str) -> String {
22    if path.is_empty() {
23        return path.to_string();
24    }
25
26    let p = Path::new(path);
27    if p.is_absolute() {
28        return path.to_string();
29    }
30
31    let resolved = base.join(p);
32    resolved.canonicalize().map_or_else(
33        |_| resolved.to_string_lossy().to_string(),
34        |canonical| canonical.to_string_lossy().to_string(),
35    )
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct ScriptConfig {
40    pub src: String,
41    #[serde(default)]
42    pub defer: bool,
43    #[serde(default)]
44    pub r#async: bool,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct ContentConfig {
49    #[serde(default)]
50    pub config_file: Option<String>,
51    #[serde(default)]
52    pub sources: Vec<String>,
53}