reql/cmd/
add.rs

1use crate::{cmd, Command};
2use ql2::term::TermType;
3use serde::Serialize;
4use std::ops::Add;
5
6pub trait Arg {
7    fn arg(self) -> cmd::Arg<()>;
8}
9
10impl Arg for cmd::Arg<()> {
11    fn arg(self) -> cmd::Arg<()> {
12        self
13    }
14}
15
16impl Arg for Command {
17    fn arg(self) -> cmd::Arg<()> {
18        Command::new(TermType::Add).with_arg(self).into_arg()
19    }
20}
21
22impl<T> Arg for T
23where
24    T: Serialize,
25{
26    fn arg(self) -> cmd::Arg<()> {
27        Command::from_json(self).arg()
28    }
29}
30
31impl<T> Add<T> for Command
32where
33    T: Arg,
34{
35    type Output = Self;
36
37    fn add(self, arg: T) -> Self {
38        arg.arg().with_parent(self).into_cmd()
39    }
40}