Function scale_value::serde::from_value

source ·
pub fn from_value<'de, Ctx, T: Deserialize<'de>>(
    value: Value<Ctx>
) -> Result<T, DeserializerError>
Expand description

Attempt to convert a crate::Value into another type via serde.

Examples

Use serde to convert a value into a built-in type:

use scale_value::Value;

let value = Value::unnamed_composite(vec![
    Value::u128(1),
    Value::u128(2),
    Value::u128(3),
]);

let arr: [u8; 3] = scale_value::serde::from_value(value).unwrap();

Converting values to a custom type:

use scale_value::Value;
use serde::{ Serialize, Deserialize };

#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum Foo {
    A { is_valid: bool, name: String },
    B(u8, bool)
}

let value1 = Value::named_variant("A", [
    ("name", Value::string("James")),
    ("is_valid", Value::bool(true)),
]);
let foo1: Foo = scale_value::serde::from_value(value1).unwrap();
assert_eq!(foo1, Foo::A { is_valid: true, name: "James".into() });

let value2 = Value::unnamed_variant("B", [
    Value::u128(123),
    Value::bool(true),
]);
let foo2: Foo = scale_value::serde::from_value(value2).unwrap();
assert_eq!(foo2, Foo::B(123, true));