mirror of
https://github.com/nushell/nushell.git
synced 2025-02-16 10:32:29 +01:00
feat: add an echo command to nu_plugin_example (#12754)
# Description This PR adds a new `echo` command to the `nu_plugin_example` plugin that simply [streams all of its input to its output](https://github.com/nushell/nushell/pull/12754/files#diff-de9fcf086b8c373039dadcc2bcb664c6014c0b2af8568eab68c0b6666ac5ccceR47). ``` : "hi" | example echo hi ``` The motivation for adding it is to have a convenient command to exercise interactivity on slow pipelines. I'll follow up on that front with [another PR](https://github.com/cablehead/nushell/pull/1/files) # Tests + Formatting https://github.com/nushell/nushell/pull/12754/files#diff-de9fcf086b8c373039dadcc2bcb664c6014c0b2af8568eab68c0b6666ac5ccceR51-R55
This commit is contained in:
parent
5466da3b52
commit
92831d7efc
55
crates/nu_plugin_example/src/commands/echo.rs
Normal file
55
crates/nu_plugin_example/src/commands/echo.rs
Normal file
@ -0,0 +1,55 @@
|
||||
use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand};
|
||||
use nu_protocol::{Category, Example, LabeledError, PipelineData, Signature, Type, Value};
|
||||
|
||||
use crate::ExamplePlugin;
|
||||
|
||||
/// `<list> | example echo`
|
||||
pub struct Echo;
|
||||
|
||||
impl PluginCommand for Echo {
|
||||
type Plugin = ExamplePlugin;
|
||||
|
||||
fn name(&self) -> &str {
|
||||
"example echo"
|
||||
}
|
||||
|
||||
fn usage(&self) -> &str {
|
||||
"Example stream consumer that outputs the received input"
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build(self.name())
|
||||
.input_output_types(vec![(Type::Any, Type::Any)])
|
||||
.category(Category::Experimental)
|
||||
}
|
||||
|
||||
fn search_terms(&self) -> Vec<&str> {
|
||||
vec!["example"]
|
||||
}
|
||||
|
||||
fn examples(&self) -> Vec<Example> {
|
||||
vec![Example {
|
||||
example: "example seq 1 5 | example echo",
|
||||
description: "echos the values from 1 to 5",
|
||||
result: Some(Value::test_list(
|
||||
(1..=5).map(Value::test_int).collect::<Vec<_>>(),
|
||||
)),
|
||||
}]
|
||||
}
|
||||
|
||||
fn run(
|
||||
&self,
|
||||
_plugin: &ExamplePlugin,
|
||||
_engine: &EngineInterface,
|
||||
_call: &EvaluatedCall,
|
||||
input: PipelineData,
|
||||
) -> Result<PipelineData, LabeledError> {
|
||||
Ok(input)
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_examples() -> Result<(), nu_protocol::ShellError> {
|
||||
use nu_plugin_test_support::PluginTest;
|
||||
PluginTest::new("example", ExamplePlugin.into())?.test_command_examples(&Echo)
|
||||
}
|
@ -25,12 +25,14 @@ pub use view_span::ViewSpan;
|
||||
|
||||
// Stream demos
|
||||
mod collect_external;
|
||||
mod echo;
|
||||
mod for_each;
|
||||
mod generate;
|
||||
mod seq;
|
||||
mod sum;
|
||||
|
||||
pub use collect_external::CollectExternal;
|
||||
pub use echo::Echo;
|
||||
pub use for_each::ForEach;
|
||||
pub use generate::Generate;
|
||||
pub use seq::Seq;
|
||||
|
@ -25,6 +25,7 @@ impl Plugin for ExamplePlugin {
|
||||
Box::new(DisableGc),
|
||||
// Stream demos
|
||||
Box::new(CollectExternal),
|
||||
Box::new(Echo),
|
||||
Box::new(ForEach),
|
||||
Box::new(Generate),
|
||||
Box::new(Seq),
|
||||
|
Loading…
Reference in New Issue
Block a user