nushell/src/commands/pick.rs

46 lines
1.1 KiB
Rust
Raw Normal View History

use crate::commands::WholeStreamCommand;
2019-07-24 00:22:11 +02:00
use crate::context::CommandRegistry;
use crate::errors::ShellError;
2019-05-22 09:12:03 +02:00
use crate::object::base::select_fields;
use crate::prelude::*;
pub struct Pick;
impl WholeStreamCommand for Pick {
fn run(
&self,
args: CommandArgs,
registry: &CommandRegistry,
) -> Result<OutputStream, ShellError> {
pick(args, registry)
}
fn name(&self) -> &str {
"pick"
}
2019-07-24 00:22:11 +02:00
fn signature(&self) -> Signature {
Signature::build("pick").required("fields", SyntaxType::Any)
2019-05-22 09:12:03 +02:00
}
}
fn pick(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
let args = args.evaluate_once(registry)?;
let (input, args) = args.parts();
2019-07-24 00:22:11 +02:00
let fields: Result<Vec<String>, _> = args
.positional
.iter()
.flatten()
.map(|a| a.as_string())
.collect();
2019-05-22 09:12:03 +02:00
let fields = fields?;
2019-07-08 18:44:53 +02:00
let objects = input
.values
.map(move |value| select_fields(&value.item, &fields, value.tag()));
Ok(objects.from_input_stream())
}