cosmic-greeter/cosmic-greeter-config/src/lib.rs
2024-08-28 22:55:08 -04:00

48 lines
1.4 KiB
Rust

// Copyright 2024 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only
pub mod user;
use std::{collections::HashMap, num::NonZeroU32};
use cosmic_config::{cosmic_config_derive::CosmicConfigEntry, CosmicConfigEntry};
use serde::{Deserialize, Serialize};
pub const APP_ID: &str = "com.system76.CosmicGreeter";
pub const CONFIG_VERSION: u64 = 1;
#[derive(Debug, Clone, Default, PartialEq, CosmicConfigEntry, Deserialize, Serialize)]
#[version = 1]
#[id = "com.system76.CosmicGreeter"]
pub struct Config {
#[serde(skip_serializing_if = "HashMap::is_empty")]
pub users: HashMap<NonZeroU32, user::UserState>,
}
impl Config {
pub fn load() -> (Self, Option<cosmic_config::Config>) {
crate::load()
}
}
pub(crate) fn load<C>() -> (C, Option<cosmic_config::Config>)
where
C: Default + CosmicConfigEntry,
{
match cosmic_config::Config::new(APP_ID, CONFIG_VERSION) {
Ok(handler) => {
let config = C::get_entry(&handler)
.inspect_err(|(errors, _)| {
for err in errors {
log::error!("{err}")
}
})
.unwrap_or_else(|(_, config)| config);
(config, Some(handler))
}
Err(e) => {
log::error!("Failed to get settings for `{APP_ID}` (v {CONFIG_VERSION}): {e:?}");
(C::default(), None)
}
}
}