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

62 lines
1.8 KiB
Rust
Raw Normal View History

2021-10-02 04:59:11 +02:00
use nu_engine::CallExt;
use nu_protocol::ast::Call;
2021-10-25 18:58:58 +02:00
use nu_protocol::engine::{Command, EngineState, Stack};
2021-10-28 06:13:10 +02:00
use nu_protocol::{
Category, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Signature,
SyntaxShape, Value,
2021-10-28 06:13:10 +02:00
};
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")
.category(Category::Filters)
2021-10-02 04:59:11 +02:00
}
fn run(
&self,
2021-10-25 08:31:39 +02:00
engine_state: &EngineState,
stack: &mut Stack,
2021-10-02 04:59:11 +02:00
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;
2021-10-25 08:31:39 +02:00
let name: String = call.req(engine_state, stack, 0)?;
2021-10-02 04:59:11 +02:00
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,
})
2021-10-28 06:13:10 +02:00
.into_pipeline_data(engine_state.ctrlc.clone())),
2021-10-25 06:01:02 +02:00
PipelineData::Stream(stream) => Ok(stream
.map(move |x| Value::Record {
cols: vec![name.clone()],
vals: vec![x],
span,
})
2021-10-28 06:13:10 +02:00
.into_pipeline_data(engine_state.ctrlc.clone())),
2021-10-25 06:01:02 +02:00
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
}
}
}