mirror of
https://github.com/nushell/nushell.git
synced 2025-07-01 07:00:37 +02:00
Do some str collect cleanup (#312)
This commit is contained in:
@ -53,8 +53,8 @@ impl PipelineData {
|
||||
|
||||
pub fn collect_string(self) -> String {
|
||||
match self {
|
||||
PipelineData::Value(v) => v.collect_string(),
|
||||
PipelineData::Stream(s) => s.collect_string(),
|
||||
PipelineData::Value(v) => v.into_string("\n"),
|
||||
PipelineData::Stream(s) => s.into_string("\n"),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -87,14 +87,11 @@ impl Value {
|
||||
pub fn as_string(&self) -> Result<String, ShellError> {
|
||||
match self {
|
||||
Value::String { val, .. } => Ok(val.to_string()),
|
||||
x => {
|
||||
println!("{:?}", x);
|
||||
Err(ShellError::CantConvert(
|
||||
"string".into(),
|
||||
x.get_type().to_string(),
|
||||
self.span()?,
|
||||
))
|
||||
}
|
||||
x => Err(ShellError::CantConvert(
|
||||
"string".into(),
|
||||
x.get_type().to_string(),
|
||||
self.span()?,
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,7 +163,7 @@ impl Value {
|
||||
}
|
||||
|
||||
/// Convert Value into string. Note that Streams will be consumed.
|
||||
pub fn into_string(self) -> String {
|
||||
pub fn into_string(self, separator: &str) -> String {
|
||||
match self {
|
||||
Value::Bool { val, .. } => val.to_string(),
|
||||
Value::Int { val, .. } => val.to_string(),
|
||||
@ -175,23 +172,27 @@ impl Value {
|
||||
Value::Duration { val, .. } => format_duration(val),
|
||||
Value::Date { val, .. } => HumanTime::from(val).to_string(),
|
||||
Value::Range { val, .. } => {
|
||||
format!("{}..{}", val.from.into_string(), val.to.into_string())
|
||||
format!(
|
||||
"{}..{}",
|
||||
val.from.into_string(", "),
|
||||
val.to.into_string(", ")
|
||||
)
|
||||
}
|
||||
Value::String { val, .. } => val,
|
||||
Value::List { vals: val, .. } => format!(
|
||||
"[{}]",
|
||||
val.into_iter()
|
||||
.map(|x| x.into_string())
|
||||
.map(|x| x.into_string(", "))
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ")
|
||||
.join(separator)
|
||||
),
|
||||
Value::Record { cols, vals, .. } => format!(
|
||||
"{{{}}}",
|
||||
cols.iter()
|
||||
.zip(vals.iter())
|
||||
.map(|(x, y)| format!("{}: {}", x, y.clone().into_string()))
|
||||
.map(|(x, y)| format!("{}: {}", x, y.clone().into_string(", ")))
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ")
|
||||
.join(separator)
|
||||
),
|
||||
Value::Block { val, .. } => format!("<Block {}>", val),
|
||||
Value::Nothing { .. } => String::new(),
|
||||
@ -201,7 +202,8 @@ impl Value {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn collect_string(self) -> String {
|
||||
/// Convert Value into string. Note that Streams will be consumed.
|
||||
pub fn debug_string(self, separator: &str) -> String {
|
||||
match self {
|
||||
Value::Bool { val, .. } => val.to_string(),
|
||||
Value::Int { val, .. } => val.to_string(),
|
||||
@ -210,24 +212,33 @@ impl Value {
|
||||
Value::Duration { val, .. } => format_duration(val),
|
||||
Value::Date { val, .. } => format!("{:?}", val),
|
||||
Value::Range { val, .. } => {
|
||||
format!("{}..{}", val.from.into_string(), val.to.into_string())
|
||||
format!(
|
||||
"{}..{}",
|
||||
val.from.into_string(", "),
|
||||
val.to.into_string(", ")
|
||||
)
|
||||
}
|
||||
Value::String { val, .. } => val,
|
||||
Value::List { vals: val, .. } => val
|
||||
.into_iter()
|
||||
.map(|x| x.collect_string())
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n"),
|
||||
Value::Record { vals, .. } => vals
|
||||
.into_iter()
|
||||
.map(|y| y.collect_string())
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n"),
|
||||
Value::List { vals: val, .. } => format!(
|
||||
"[{}]",
|
||||
val.into_iter()
|
||||
.map(|x| x.into_string(", "))
|
||||
.collect::<Vec<_>>()
|
||||
.join(separator)
|
||||
),
|
||||
Value::Record { cols, vals, .. } => format!(
|
||||
"{{{}}}",
|
||||
cols.iter()
|
||||
.zip(vals.iter())
|
||||
.map(|(x, y)| format!("{}: {}", x, y.clone().into_string(", ")))
|
||||
.collect::<Vec<_>>()
|
||||
.join(separator)
|
||||
),
|
||||
Value::Block { val, .. } => format!("<Block {}>", val),
|
||||
Value::Nothing { .. } => String::new(),
|
||||
Value::Error { error } => format!("{:?}", error),
|
||||
Value::Binary { val, .. } => format!("{:?}", val),
|
||||
Value::CellPath { .. } => self.into_string(),
|
||||
Value::CellPath { val, .. } => val.into_string(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -534,6 +545,15 @@ impl Value {
|
||||
val: lhs.to_string() + rhs,
|
||||
span,
|
||||
}),
|
||||
(Value::Date { val: lhs, .. }, Value::Duration { val: rhs, .. }) => {
|
||||
match lhs.checked_add_signed(chrono::Duration::nanoseconds(*rhs)) {
|
||||
Some(val) => Ok(Value::Date { val, span }),
|
||||
_ => Err(ShellError::OperatorOverflow(
|
||||
"addition operation overflowed".into(),
|
||||
span,
|
||||
)),
|
||||
}
|
||||
}
|
||||
(Value::Duration { val: lhs, .. }, Value::Duration { val: rhs, .. }) => {
|
||||
if let Some(val) = lhs.checked_add(*rhs) {
|
||||
Ok(Value::Duration { val, span })
|
||||
@ -590,6 +610,15 @@ impl Value {
|
||||
val: lhs - rhs,
|
||||
span,
|
||||
}),
|
||||
(Value::Date { val: lhs, .. }, Value::Duration { val: rhs, .. }) => {
|
||||
match lhs.checked_sub_signed(chrono::Duration::nanoseconds(*rhs)) {
|
||||
Some(val) => Ok(Value::Date { val, span }),
|
||||
_ => Err(ShellError::OperatorOverflow(
|
||||
"subtraction operation overflowed".into(),
|
||||
span,
|
||||
)),
|
||||
}
|
||||
}
|
||||
(Value::Duration { val: lhs, .. }, Value::Duration { val: rhs, .. }) => {
|
||||
if let Some(val) = lhs.checked_sub(*rhs) {
|
||||
Ok(Value::Duration { val, span })
|
||||
|
@ -16,7 +16,7 @@ impl RowStream {
|
||||
.join(", "),
|
||||
self.map(|x: Vec<Value>| {
|
||||
x.into_iter()
|
||||
.map(|x| x.into_string())
|
||||
.map(|x| x.into_string(", "))
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
})
|
||||
|
@ -19,21 +19,15 @@ pub struct ValueStream {
|
||||
}
|
||||
|
||||
impl ValueStream {
|
||||
pub fn into_string(self) -> String {
|
||||
pub fn into_string(self, separator: &str) -> String {
|
||||
format!(
|
||||
"[{}]",
|
||||
self.map(|x: Value| x.into_string())
|
||||
self.map(|x: Value| x.into_string(", "))
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
.join(separator)
|
||||
)
|
||||
}
|
||||
|
||||
pub fn collect_string(self) -> String {
|
||||
self.map(|x: Value| x.collect_string())
|
||||
.collect::<Vec<String>>()
|
||||
.join("\n")
|
||||
}
|
||||
|
||||
pub fn from_stream(
|
||||
input: impl Iterator<Item = Value> + Send + 'static,
|
||||
ctrlc: Option<Arc<AtomicBool>>,
|
||||
|
Reference in New Issue
Block a user