use saphyr::{Sequence, Yaml};
use crate::utils::error::create_error;
mod hyprctl;
fn validate_config_sequence(sequence: &Sequence) -> bool {
sequence.iter().all(|subconfig| subconfig.is_mapping())
}
pub fn apply_config(config: &Yaml<'_>) -> Result<(), String> {
if !config.is_sequence() {
return create_error("hyprpaper configuration should be a sequence");
}
let wallpapers = config.as_sequence().unwrap();
if !validate_config_sequence(wallpapers) {
return create_error(
"hyprpaper configuration must be a sequence of mappings",
);
}
for section in wallpapers {
let monitor_query = section.as_mapping_get("monitor");
let wallpaper_query = section.as_mapping_get("wallpaper");
if monitor_query.is_none() {
return create_error("expected key monitor not found");
}
if wallpaper_query.is_none() {
return create_error("expected key wallpaper not found");
}
let monitor = monitor_query.unwrap();
let wallpaper = wallpaper_query.unwrap();
if !monitor.is_string() {
return create_error("expected key monitor can only be a string");
}
if !wallpaper.is_string() {
return create_error(
"expected key background can only be a string",
);
}
let monitor_str = monitor.as_str().unwrap();
let background_str = wallpaper.as_str().unwrap();
hyprctl::apply_wallpaper(&monitor_str, &background_str)?
}
Ok(())
}