nushell/src/commands/take.rs

30 lines
672 B
Rust
Raw Normal View History

2019-05-15 18:12:38 +02:00
use crate::errors::ShellError;
use crate::prelude::*;
use derive_new::new;
#[derive(new)]
2019-05-16 02:21:46 +02:00
pub struct Take;
2019-05-15 18:12:38 +02:00
2019-05-16 02:21:46 +02:00
// TODO: "Amount remaining" wrapper
2019-05-15 18:12:38 +02:00
impl crate::Command for Take {
2019-05-16 02:21:46 +02:00
fn run(&self, args: CommandArgs<'caller>) -> Result<VecDeque<ReturnValue>, ShellError> {
let amount = args.args[0].as_int()?;
let amount = if args.input.len() > amount as usize {
amount as usize
2019-05-15 18:12:38 +02:00
} else {
2019-05-16 02:21:46 +02:00
args.input.len()
2019-05-15 18:12:38 +02:00
};
2019-05-16 02:21:46 +02:00
let out: VecDeque<ReturnValue> = args
.input
2019-05-15 18:12:38 +02:00
.into_iter()
.take(amount)
.map(|v| ReturnValue::Value(v))
.collect();
Ok(out)
}
}