ecksport_codec/
serde_cbor_wrap.rs1use serde::{de::DeserializeOwned, Serialize};
4
5use crate::errors::CodecError;
6use crate::traits::RpcCodec;
7
8#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
10pub struct AsSerdeCbor<T: DeserializeOwned + Serialize>(T);
11
12impl<T: DeserializeOwned + Serialize> AsSerdeCbor<T> {
13 pub fn new(v: T) -> Self {
14 Self(v)
15 }
16
17 pub fn inner(&self) -> &T {
18 &self.0
19 }
20
21 pub fn inner_mut(&mut self) -> &mut T {
22 &mut self.0
23 }
24
25 pub fn into_inner(self) -> T {
26 self.0
27 }
28}
29
30impl<T: DeserializeOwned + Serialize> From<T> for AsSerdeCbor<T> {
31 fn from(value: T) -> Self {
32 Self::new(value)
33 }
34}
35
36impl<T: DeserializeOwned + Serialize> RpcCodec for AsSerdeCbor<T> {
37 fn from_slice(buf: &[u8]) -> Result<Self, CodecError> {
38 let v = serde_cbor::from_slice::<T>(buf).map_err(CodecError::SerdeCbor)?;
39 Ok(Self(v))
40 }
41
42 fn fill_buf(&self, buf: &mut Vec<u8>) -> Result<(), CodecError> {
43 serde_cbor::to_writer(buf, &self.0).map_err(CodecError::SerdeCbor)?;
44 Ok(())
45 }
46}