Skip to main content

wesichain_core/
value.rs

1use serde::{de::DeserializeOwned, Serialize};
2
3use crate::WesichainError;
4
5pub type Value = serde_json::Value;
6
7/// Converts a value into `Value`, falling back to `Value::Null` on serialization errors (v0 behavior).
8pub trait IntoValue {
9    fn into_value(self) -> Value;
10}
11
12pub trait TryFromValue: Sized {
13    fn try_from_value(value: Value) -> Result<Self, WesichainError>;
14}
15
16impl<T> IntoValue for T
17where
18    T: Serialize,
19{
20    fn into_value(self) -> Value {
21        serde_json::to_value(self).unwrap_or(Value::Null)
22    }
23}
24
25impl<T> TryFromValue for T
26where
27    T: DeserializeOwned,
28{
29    fn try_from_value(value: Value) -> Result<Self, WesichainError> {
30        Ok(serde_json::from_value(value)?)
31    }
32}