nushell/src/commands/take.rs

24 lines
523 B
Rust
Raw Normal View History

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