aether_renderer_core/
config.rs

1use serde::Deserialize;
2use std::path::PathBuf;
3
4/// Render configuration loaded from a JSON file or CLI arguments
5#[derive(Debug, Deserialize)]
6pub struct RenderConfig {
7    pub input: PathBuf,
8    pub output: String,
9    #[serde(default = "default_fps")]
10    pub fps: u32,
11    #[serde(default = "default_format")]
12    pub format: String,
13    #[serde(default)]
14    pub fade_in: f32,
15    #[serde(default)]
16    pub fade_out: f32,
17    #[serde(default)]
18    pub bitrate: Option<String>,
19    #[serde(default)]
20    pub crf: Option<u32>,
21    #[serde(default)]
22    pub preview: bool,
23    #[serde(default)]
24    pub file_pattern: Option<String>,
25    #[serde(default)]
26    pub verbose: bool,
27}
28
29fn default_fps() -> u32 {
30    30
31}
32
33fn default_format() -> String {
34    "webm".into()
35}
36
37impl RenderConfig {
38    /// Load configuration from a JSON file
39    pub fn from_file(path: &str) -> Result<Self, String> {
40        let config_str = std::fs::read_to_string(path)
41            .map_err(|_| format!("❌ Config file '{}' not found.", path))?;
42        serde_json::from_str(&config_str).map_err(|e| format!("❌ Failed to parse config: {}", e))
43    }
44}