rcc_cosmos/proto_wrapper/msg/
msg_serialize.rs

1use serde::{Serialize, Serializer};
2use serde::ser::Error;
3use serde_json::Value;
4use crate::Result as CosmosResult;
5
6pub trait SerializeJson {
7    fn to_json(&self) -> CosmosResult<Value>;
8}
9
10pub trait Msg: SerializeJson {}
11
12impl Serialize for dyn Msg {
13    fn serialize<S>(&self, serializer: S) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
14        where
15            S: Serializer,
16    {
17        let json_value = self.to_json().map_err(|err| Error::custom(err.to_string()))?;
18        json_value.serialize(serializer)
19    }
20}
21
22