ninja-files-data 0.1.0

Core data structures for ninja files
Documentation
mod builder;
mod try_from;
use std::collections::BTreeMap;

use crate::{Arg, InvalidArg, InvalidProcess, Process};
pub use builder::*;

#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub struct Command {
    pub process: Process,
    pub args: Vec<Arg>,
    pub env: BTreeMap<String, String>,
}

impl Command {
    pub fn try_create<P>(process: P) -> Result<Command, InvalidProcess>
    where
        P: TryInto<Process, Error = InvalidProcess>,
    {
        let process: Process = process.try_into()?;
        let command = Command {
            process,
            args: vec![],
            env: BTreeMap::new(),
        };
        Ok(command)
    }

    pub fn arg<A>(mut self, arg: A) -> Result<Self, InvalidArg>
    where
        Arg: TryFrom<A, Error = InvalidArg>,
    {
        let arg: Arg = arg.try_into()?;
        self.args.push(arg);
        Ok(self)
    }
}