systemprompt_provider_contracts/web_config/
paths.rs1use 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}