use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "snake_case")]
pub struct HomeAssistantConfig {
pub url: String,
pub menu: HomeAssistantMenu,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "snake_case")]
pub struct HomeAssistantMenu {
pub name: String,
pub buttons: Vec<HomeAssistantButton>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum HomeAssistantButton {
Switch { entity_id: String, name: String },
RgbLight { entity_id: String, name: String },
Menu(HomeAssistantMenu),
}
pub fn load_config<S: Into<String>>(
arg: S,
) -> Result<HomeAssistantConfig, Box<dyn std::error::Error>> {
let file = std::fs::File::open(arg.into())?;
let reader = std::io::BufReader::new(file);
let config: HomeAssistantConfig = serde_yaml::from_reader(reader)?;
Ok(config)
}