nushell/crates/nu-command/src/filters/wrap.rs

56 lines
1.6 KiB
Rust
Raw Normal View History

2021-10-02 04:59:11 +02:00
use nu_engine::CallExt;
use nu_protocol::ast::Call;
use nu_protocol::engine::{Command, EvaluationContext};
2021-10-25 06:01:02 +02:00
use nu_protocol::{IntoPipelineData, PipelineData, Signature, SyntaxShape, Value};
2021-10-02 04:59:11 +02:00
2021-10-25 06:01:02 +02:00
#[derive(Clone)]
2021-10-02 04:59:11 +02:00
pub struct Wrap;
impl Command for Wrap {
fn name(&self) -> &str {
"wrap"
}
fn usage(&self) -> &str {
"Wrap the value into a column."
}
fn signature(&self) -> nu_protocol::Signature {
Signature::build("wrap").required("name", SyntaxShape::String, "the name of the column")
}
fn run(
&self,
context: &EvaluationContext,
call: &Call,
2021-10-25 06:01:02 +02:00
input: PipelineData,
) -> Result<nu_protocol::PipelineData, nu_protocol::ShellError> {
2021-10-02 04:59:11 +02:00
let span = call.head;
let name: String = call.req(context, 0)?;
match input {
2021-10-25 06:01:02 +02:00
PipelineData::Value(Value::List { vals, .. }) => Ok(vals
.into_iter()
.map(move |x| Value::Record {
cols: vec![name.clone()],
vals: vec![x],
span,
})
.into_pipeline_data()),
PipelineData::Stream(stream) => Ok(stream
.map(move |x| Value::Record {
cols: vec![name.clone()],
vals: vec![x],
span,
})
.into_pipeline_data()),
PipelineData::Value(input) => Ok(Value::Record {
2021-10-02 04:59:11 +02:00
cols: vec![name],
vals: vec![input],
span,
2021-10-25 06:01:02 +02:00
}
.into_pipeline_data()),
2021-10-02 04:59:11 +02:00
}
}
}