pub trait IntoValue: Sized {
// Required method
fn into_value(self, span: Span) -> Value;
}Expand description
A trait for converting a value into a Value.
This conversion is infallible, for fallible conversions use TryIntoValue.
§Derivable
This trait can be used with #[derive].
When derived on structs with named fields, the resulting value representation will use
Value::Record, where each field of the record corresponds to a field of the struct.
By default, field names will be used as-is unless specified otherwise:
- If
#[nu_value(rename = "...")]is applied to a specific field, that name is used. - If
#[nu_value(rename_all = "...")]is applied to the struct, field names will be case-converted accordingly. - If neither attribute is used, the original field name will be retained.
For structs with unnamed fields, the value representation will be Value::List, with all
fields inserted into a list.
Unit structs will be represented as Value::Nothing since they contain no data.
For enums, the resulting value representation depends on the variant name:
- If
#[nu_value(rename = "...")]is applied to a specific variant, that name is used. - If
#[nu_value(rename_all = "...")]is applied to the enum, variant names will be case-converted accordingly. - If neither attribute is used, variant names will default to snake_case.
Only enums with no fields may derive this trait.
The resulting value will be the name of the variant as a Value::String.
All case options from heck are supported, as well as the values allowed by
#[serde(rename_all)].
§Enum Example
#[derive(IntoValue)]
#[nu_value(rename_all = "COBOL-CASE")]
enum Bird {
MountainEagle,
ForestOwl,
#[nu_value(rename = "RIVER-QUACK")]
RiverDuck,
}
assert_eq!(
Bird::ForestOwl.into_value(span),
Value::string("FOREST-OWL", span)
);
assert_eq!(
Bird::RiverDuck.into_value(span),
Value::string("RIVER-QUACK", span)
);§Struct Example
#[derive(IntoValue)]
#[nu_value(rename_all = "kebab-case")]
struct Person {
first_name: String,
last_name: String,
#[nu_value(rename = "age")]
age_years: u32,
}
assert_eq!(
Person {
first_name: "John".into(),
last_name: "Doe".into(),
age_years: 42,
}.into_value(span),
Value::record(record! {
"first-name" => Value::string("John", span),
"last-name" => Value::string("Doe", span),
"age" => Value::int(42, span),
}, span)
);Required Methods§
Sourcefn into_value(self, span: Span) -> Value
fn into_value(self, span: Span) -> Value
Converts the given value to a Value.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.