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 Process {
    #[serde(default = "defaults::string_vec")]
    pub log_monitors: Vec<String>,
    #[serde(default = "defaults::string")]
    pub name: String,
    #[serde(default = "defaults::string")]
    pub command: String,
    #[serde(default = "defaults::cwd")]
    pub cwd: String,
    #[serde(default = "defaults::string")]
    pub onsucceed: String,
    #[serde(default = "defaults::string")]
    pub onfail: String,
}

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

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

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