forked from extern/nushell
Pick now produces an error when none of the columns are found
This commit is contained in:
parent
77d856fd53
commit
4af9e1de41
@ -2,8 +2,9 @@ use crate::commands::WholeStreamCommand;
|
|||||||
use crate::context::CommandRegistry;
|
use crate::context::CommandRegistry;
|
||||||
use crate::data::base::select_fields;
|
use crate::data::base::select_fields;
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
use futures_util::pin_mut;
|
||||||
use nu_errors::ShellError;
|
use nu_errors::ShellError;
|
||||||
use nu_protocol::{Signature, SyntaxShape};
|
use nu_protocol::{Primitive, ReturnSuccess, ReturnValue, Signature, SyntaxShape, UntaggedValue};
|
||||||
use nu_source::Tagged;
|
use nu_source::Tagged;
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
@ -49,9 +50,33 @@ fn pick(
|
|||||||
|
|
||||||
let fields: Vec<_> = fields.iter().map(|f| f.item.clone()).collect();
|
let fields: Vec<_> = fields.iter().map(|f| f.item.clone()).collect();
|
||||||
|
|
||||||
let objects = input
|
let stream = async_stream! {
|
||||||
.values
|
let values = input.values;
|
||||||
.map(move |value| select_fields(&value, &fields, value.tag.clone()));
|
pin_mut!(values);
|
||||||
|
|
||||||
Ok(objects.from_input_stream())
|
let mut empty = true;
|
||||||
|
|
||||||
|
while let Some(value) = values.next().await {
|
||||||
|
let new_value = select_fields(&value, &fields, value.tag.clone());
|
||||||
|
|
||||||
|
if let UntaggedValue::Row(dict) = &new_value.value {
|
||||||
|
if dict
|
||||||
|
.entries
|
||||||
|
.values()
|
||||||
|
.any(|v| v.value != UntaggedValue::Primitive(Primitive::Nothing))
|
||||||
|
{
|
||||||
|
empty = false;
|
||||||
|
yield ReturnSuccess::value(new_value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if empty {
|
||||||
|
yield Err(ShellError::labeled_error("None of the columns were found in the input", "could not find columns given", name));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let stream: BoxStream<'static, ReturnValue> = stream.boxed();
|
||||||
|
|
||||||
|
Ok(stream.to_output_stream())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user