phantom_frame/
config.rs

1use anyhow::Result;
2use serde::{Deserialize, Serialize};
3use std::path::Path;
4
5#[derive(Debug, Clone, Deserialize, Serialize)]
6pub struct Config {
7    pub server: ServerConfig,
8}
9
10#[derive(Debug, Clone, Deserialize, Serialize)]
11pub struct ServerConfig {
12    #[serde(default = "default_control_port")]
13    pub control_port: u16,
14
15    #[serde(default = "default_proxy_port")]
16    pub proxy_port: u16,
17
18    /// The URL of the backend to proxy to
19    #[serde(default = "default_proxy_url")]
20    pub proxy_url: String,
21
22    pub control_auth: Option<String>,
23}
24
25fn default_control_port() -> u16 {
26    17809
27}
28
29fn default_proxy_port() -> u16 {
30    3000
31}
32
33fn default_proxy_url() -> String {
34    "http://localhost:8080".to_string()
35}
36
37impl Config {
38    pub fn from_file(path: impl AsRef<Path>) -> Result<Self> {
39        let content = std::fs::read_to_string(path)?;
40        let config: Config = toml::from_str(&content)?;
41        Ok(config)
42    }
43}
44
45impl Default for ServerConfig {
46    fn default() -> Self {
47        Self {
48            control_port: default_control_port(),
49            proxy_port: default_proxy_port(),
50            proxy_url: default_proxy_url(),
51            control_auth: None,
52        }
53    }
54}