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