Files
nushell/crates/nu_plugin_example/src/commands/echo.rs
Andy Gayton 92831d7efc 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
2024-05-08 12:45:44 -07:00

56 lines
1.4 KiB
Rust

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)
}