1use serde::{de::DeserializeOwned, Serialize};
2
3use crate::WesichainError;
4
5pub type Value = serde_json::Value;
6
7pub 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}