1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
use super::args::Args; use crate::{cmd, Func, Query}; use ql2::term::TermType; use serde::Serialize; pub trait Arg { fn arg(self) -> cmd::Arg<()>; } impl Arg for cmd::Arg<()> { fn arg(self) -> cmd::Arg<()> { self } } impl<T> Arg for T where T: Serialize, { fn arg(self) -> cmd::Arg<()> { let arg = Query::from_json(self); Query::new(TermType::Map) .with_arg(arg.wrap_row()) .into_arg() } } impl Arg for Func { fn arg(self) -> cmd::Arg<()> { let Func(func) = self; func.arg() } } impl<T> Arg for Args<(T, Func)> where T: Serialize, { fn arg(self) -> cmd::Arg<()> { let Args((sequence, Func(func))) = self; sequence.arg().with_arg(func) } }