Skip to main content

systemprompt_provider_contracts/web_config/
paths.rs

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