port strings size engine-p (#3690) (#3753)

migrate `size` command to engine-p.

I also tweaked the signature of the primary logic (`size`) to mimic `keep`.

Part of #3390.
This commit is contained in:
Eli Flanagan 2021-07-09 14:45:19 -04:00 committed by GitHub
parent 2b80f40164
commit 11cb5ed10e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,7 +4,7 @@ use crate::prelude::*;
use indexmap::indexmap; use indexmap::indexmap;
use nu_engine::WholeStreamCommand; use nu_engine::WholeStreamCommand;
use nu_errors::ShellError; use nu_errors::ShellError;
use nu_protocol::{ReturnSuccess, Signature, TaggedDictBuilder, UntaggedValue, Value}; use nu_protocol::{Signature, TaggedDictBuilder, UntaggedValue, Value};
use unicode_segmentation::UnicodeSegmentation; use unicode_segmentation::UnicodeSegmentation;
pub struct Size; pub struct Size;
@ -22,8 +22,8 @@ impl WholeStreamCommand for Size {
"Gather word count statistics on the text." "Gather word count statistics on the text."
} }
fn run_with_actions(&self, args: CommandArgs) -> Result<ActionStream, ShellError> { fn run(&self, args: CommandArgs) -> Result<OutputStream, ShellError> {
Ok(size(args)) size(args)
} }
fn examples(&self) -> Vec<Example> { fn examples(&self) -> Vec<Example> {
@ -54,15 +54,15 @@ impl WholeStreamCommand for Size {
} }
} }
fn size(args: CommandArgs) -> ActionStream { fn size(args: CommandArgs) -> Result<OutputStream, ShellError> {
let input = args.input; let input = args.input;
let tag = args.call_info.name_tag; let tag = args.call_info.name_tag;
let name_span = tag.span; let name_span = tag.span;
input Ok(input
.map(move |v| { .map(move |v| {
if let Ok(s) = v.as_string() { if let Ok(s) = v.as_string() {
ReturnSuccess::value(count(&s, &v.tag)) Ok(count(&s, &v.tag))
} else { } else {
Err(ShellError::labeled_error_with_secondary( Err(ShellError::labeled_error_with_secondary(
"Expected a string from pipeline", "Expected a string from pipeline",
@ -73,7 +73,7 @@ fn size(args: CommandArgs) -> ActionStream {
)) ))
} }
}) })
.into_action_stream() .into_input_stream())
} }
fn count(contents: &str, tag: impl Into<Tag>) -> Value { fn count(contents: &str, tag: impl Into<Tag>) -> Value {