first and get coverage.

This commit is contained in:
Andrés N. Robalino
2019-09-12 05:22:58 -05:00
parent 39489a75aa
commit 7838dac689
2 changed files with 129 additions and 2 deletions

View File

@ -7,6 +7,7 @@ pub struct Get;
#[derive(Deserialize)]
pub struct GetArgs {
member: Tagged<String>,
rest: Vec<Tagged<String>>,
}
@ -16,7 +17,9 @@ impl WholeStreamCommand for Get {
}
fn signature(&self) -> Signature {
Signature::build("get").rest(SyntaxType::Member)
Signature::build("get")
.required("member", SyntaxType::Member)
.rest(SyntaxType::Member)
}
fn usage(&self) -> &str {
@ -63,13 +66,24 @@ fn get_member(path: &Tagged<String>, obj: &Tagged<Value>) -> Result<Tagged<Value
}
pub fn get(
GetArgs { rest: fields }: GetArgs,
GetArgs {
member: member,
rest: fields,
}: GetArgs,
RunnableContext { input, .. }: RunnableContext,
) -> Result<OutputStream, ShellError> {
let stream = input
.values
.map(move |item| {
let mut result = VecDeque::new();
let member = vec![member.clone()];
let fields = vec![&member, &fields]
.into_iter()
.flatten()
.collect::<Vec<&Tagged<String>>>();
for field in &fields {
match get_member(field, &item) {
Ok(Tagged {