mirror of
https://github.com/nushell/nushell.git
synced 2024-12-23 15:39:06 +01:00
Add echo command
This commit is contained in:
parent
90b358d60b
commit
4cdaed1ad4
@ -210,6 +210,7 @@ pub async fn cli() -> Result<(), Box<dyn Error>> {
|
|||||||
per_item_command(Open),
|
per_item_command(Open),
|
||||||
per_item_command(Post),
|
per_item_command(Post),
|
||||||
per_item_command(Where),
|
per_item_command(Where),
|
||||||
|
per_item_command(Echo),
|
||||||
whole_stream_command(Config),
|
whole_stream_command(Config),
|
||||||
whole_stream_command(SkipWhile),
|
whole_stream_command(SkipWhile),
|
||||||
per_item_command(Enter),
|
per_item_command(Enter),
|
||||||
|
@ -11,6 +11,7 @@ pub(crate) mod config;
|
|||||||
pub(crate) mod cp;
|
pub(crate) mod cp;
|
||||||
pub(crate) mod date;
|
pub(crate) mod date;
|
||||||
pub(crate) mod debug;
|
pub(crate) mod debug;
|
||||||
|
pub(crate) mod echo;
|
||||||
pub(crate) mod enter;
|
pub(crate) mod enter;
|
||||||
pub(crate) mod exit;
|
pub(crate) mod exit;
|
||||||
pub(crate) mod fetch;
|
pub(crate) mod fetch;
|
||||||
@ -76,6 +77,7 @@ pub(crate) use config::Config;
|
|||||||
pub(crate) use cp::Cpy;
|
pub(crate) use cp::Cpy;
|
||||||
pub(crate) use date::Date;
|
pub(crate) use date::Date;
|
||||||
pub(crate) use debug::Debug;
|
pub(crate) use debug::Debug;
|
||||||
|
pub(crate) use echo::Echo;
|
||||||
pub(crate) use enter::Enter;
|
pub(crate) use enter::Enter;
|
||||||
pub(crate) use exit::Exit;
|
pub(crate) use exit::Exit;
|
||||||
pub(crate) use fetch::Fetch;
|
pub(crate) use fetch::Fetch;
|
||||||
|
72
src/commands/echo.rs
Normal file
72
src/commands/echo.rs
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
use crate::data::Value;
|
||||||
|
use crate::errors::ShellError;
|
||||||
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
use crate::parser::registry::Signature;
|
||||||
|
|
||||||
|
pub struct Echo;
|
||||||
|
|
||||||
|
impl PerItemCommand for Echo {
|
||||||
|
fn name(&self) -> &str {
|
||||||
|
"echo"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn signature(&self) -> Signature {
|
||||||
|
Signature::build("echo").rest(SyntaxType::Any)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn usage(&self) -> &str {
|
||||||
|
"Echo the argments back to the user."
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(
|
||||||
|
&self,
|
||||||
|
call_info: &CallInfo,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
raw_args: &RawCommandArgs,
|
||||||
|
_input: Tagged<Value>,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
|
run(call_info, registry, raw_args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(
|
||||||
|
call_info: &CallInfo,
|
||||||
|
_registry: &CommandRegistry,
|
||||||
|
_raw_args: &RawCommandArgs,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
|
let name = call_info.name_span;
|
||||||
|
|
||||||
|
let mut output = String::new();
|
||||||
|
|
||||||
|
let mut first = true;
|
||||||
|
|
||||||
|
if let Some(ref positional) = call_info.args.positional {
|
||||||
|
for i in positional {
|
||||||
|
match i.as_string() {
|
||||||
|
Ok(s) => {
|
||||||
|
if !first {
|
||||||
|
output.push_str(" ");
|
||||||
|
} else {
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
output.push_str(&s);
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
return Err(ShellError::labeled_error(
|
||||||
|
"Expect a string from pipeline",
|
||||||
|
"not a string-compatible value",
|
||||||
|
i.span(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let stream = VecDeque::from(vec![Ok(ReturnSuccess::Value(
|
||||||
|
Value::string(output).simple_spanned(name),
|
||||||
|
))]);
|
||||||
|
|
||||||
|
Ok(stream.to_output_stream())
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user