use std::path::PathBuf; /// A single line from a MangoHud config file, preserving its original text. #[derive(Debug, Clone, PartialEq)] pub enum ConfigLine { Comment(String), Blank, Option { key: String, value: Option, raw: String, }, CommentedOption { key: String, value: Option, raw: String, }, } /// The current state of an option in the in-memory config. #[derive(Debug, Clone, PartialEq)] pub enum ConfigValue { Absent, Flag, Value(String), Disabled, } /// Type system for schema entries. #[derive(Debug, Clone)] pub enum OptionType { Flag, Bool, Int { min: i64, max: i64, }, Float { min: f64, max: f64, }, Str { max_len: usize, }, Color, Enum { variants: Vec, }, FpsLimitList, KeyBind, CommaSepInts, CommaSepFloats, CommaSepStrings { valid_values: Option>, }, Path { must_exist: bool, must_be_writable: bool, }, } #[derive(Debug, Clone, PartialEq)] pub enum GpuVendor { Any, AmdOnly, NvidiaOnly, IntelOnly, } #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Category { Performance, DisplayFps, DisplayGpu, DisplayCpu, DisplayMemory, DisplayIoNetwork, DisplayMisc, DisplayGraphs, DisplayBattery, DisplayMediaPlayer, DisplayGamescope, DisplaySteamDeck, DisplayTimeText, AppearanceLayout, AppearanceColors, AppearanceTypography, BehaviorKeybindings, BehaviorFpsLimits, BehaviorLogging, BehaviorMisc, WorkaroundsOpengl, AdvancedFcat, AdvancedFtrace, } /// A single schema entry — defines everything about one MangoHud option. #[derive(Debug, Clone)] pub struct SchemaEntry { pub key: &'static str, pub option_type: OptionType, pub description: &'static str, pub category: Category, pub dependencies: &'static [&'static str], pub conflicts_with: &'static [&'static str], pub gpu_vendor_only: GpuVendor, pub gamescope_only: bool, } /// Validation result for a single option. #[derive(Debug, Clone, PartialEq)] pub enum ValidationResult { Ok, Warning(String), Error(String), } /// The full in-memory representation of a parsed config file. #[derive(Debug, Clone)] pub struct AnnotatedConfig { /// Ordered list of lines as they appear in the file. pub lines: Vec, /// Fast lookup map: key → (line_index, current_value). pub options: indexmap::IndexMap, /// Source path, if backed by a file. pub path: Option, /// Whether this config has unsaved in-memory changes. pub dirty: bool, }