arpx 0.5.0

Small-scale process orchestration
Documentation
use crate::runtime::profile::deserialize::defaults;
use serde::{Deserialize, Deserializer};
use std::collections::HashMap;

#[derive(Deserialize, Debug, Clone)]
pub struct LogMonitor {
    #[serde(default = "defaults::buffer_size")]
    pub buffer_size: usize,
    #[serde(default = "defaults::string")]
    pub name: String,
    #[serde(default = "defaults::string")]
    pub ontrigger: String,
    #[serde(default = "defaults::string")]
    pub test: String,
}

pub fn deserialize<'de, D>(deserializer: D) -> Result<HashMap<String, LogMonitor>, D::Error>
where
    D: Deserializer<'de>,
{
    #[derive(Deserialize)]
    struct Wrapper(LogMonitor);

    let deserialized = HashMap::<String, Wrapper>::deserialize(deserializer)?;
    Ok(deserialized
        .into_iter()
        .map(|(k, Wrapper(mut v))| {
            v.name = k.clone();

            (k, v)
        })
        .collect())
}