mirror of
https://github.com/nushell/nushell.git
synced 2025-06-30 22:50:14 +02:00
Add Filesize
type (#14369)
# Description Adds a new `Filesize` type so that `FromValue` can be used to convert a `Value::Filesize` to a `Filesize`. Currently, to extract a filesize from a `Value` using `FromValue`, you have to extract an `i64` which coerces `Value::Int`, `Value::Duration`, and `Value::Filesize` to an `i64`. Having a separate type also allows us to enforce checked math to catch overflows. Similarly, it allows us to specify other trait implementations like `Display` in a common place. # User-Facing Changes Multiplication with filesizes now error on overflow. Should not be a breaking change for plugins (i.e., serialization) since `Filesize` is marked with `serde(transparent)`. # Tests + Formatting Updated some tests.
This commit is contained in:
@ -109,7 +109,7 @@ pub fn value_to_json_value(v: &Value) -> Result<nu_json::Value, ShellError> {
|
||||
let span = v.span();
|
||||
Ok(match v {
|
||||
Value::Bool { val, .. } => nu_json::Value::Bool(*val),
|
||||
Value::Filesize { val, .. } => nu_json::Value::I64(*val),
|
||||
Value::Filesize { val, .. } => nu_json::Value::I64(val.get()),
|
||||
Value::Duration { val, .. } => nu_json::Value::I64(*val),
|
||||
Value::Date { val, .. } => nu_json::Value::String(val.to_string()),
|
||||
Value::Float { val, .. } => nu_json::Value::F64(*val),
|
||||
|
@ -168,7 +168,7 @@ pub(crate) fn write_value(
|
||||
mp::write_f64(out, *val).err_span(span)?;
|
||||
}
|
||||
Value::Filesize { val, .. } => {
|
||||
mp::write_sint(out, *val).err_span(span)?;
|
||||
mp::write_sint(out, val.get()).err_span(span)?;
|
||||
}
|
||||
Value::Duration { val, .. } => {
|
||||
mp::write_sint(out, *val).err_span(span)?;
|
||||
|
@ -47,7 +47,7 @@ fn helper(engine_state: &EngineState, v: &Value) -> Result<toml::Value, ShellErr
|
||||
Ok(match &v {
|
||||
Value::Bool { val, .. } => toml::Value::Boolean(*val),
|
||||
Value::Int { val, .. } => toml::Value::Integer(*val),
|
||||
Value::Filesize { val, .. } => toml::Value::Integer(*val),
|
||||
Value::Filesize { val, .. } => toml::Value::Integer(val.get()),
|
||||
Value::Duration { val, .. } => toml::Value::String(val.to_string()),
|
||||
Value::Date { val, .. } => toml::Value::Datetime(to_toml_datetime(val)),
|
||||
Value::Range { .. } => toml::Value::String("<Range>".to_string()),
|
||||
|
@ -44,7 +44,9 @@ pub fn value_to_yaml_value(v: &Value) -> Result<serde_yaml::Value, ShellError> {
|
||||
Ok(match &v {
|
||||
Value::Bool { val, .. } => serde_yaml::Value::Bool(*val),
|
||||
Value::Int { val, .. } => serde_yaml::Value::Number(serde_yaml::Number::from(*val)),
|
||||
Value::Filesize { val, .. } => serde_yaml::Value::Number(serde_yaml::Number::from(*val)),
|
||||
Value::Filesize { val, .. } => {
|
||||
serde_yaml::Value::Number(serde_yaml::Number::from(val.get()))
|
||||
}
|
||||
Value::Duration { val, .. } => serde_yaml::Value::String(val.to_string()),
|
||||
Value::Date { val, .. } => serde_yaml::Value::String(val.to_string()),
|
||||
Value::Range { .. } => serde_yaml::Value::Null,
|
||||
|
Reference in New Issue
Block a user