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    #[serde(default)]
28    pub verbose_ffmpeg: bool,
29}
30
31fn default_fps() -> u32 {
32    30
33}
34
35fn default_format() -> String {
36    "webm".into()
37}
38
39impl RenderConfig {
40    /// Load configuration from a JSON file
41    pub fn from_file(path: &str) -> Result<Self, String> {
42        let config_str = std::fs::read_to_string(path)
43            .map_err(|_| format!("❌ Config file '{}' not found.", path))?;
44        serde_json::from_str(&config_str).map_err(|e| format!("❌ Failed to parse config: {}", e))
45    }
46}