pb_jelly/
erased.rs

1//! Blanket-implemented erased typings for the types used throughout the serialization portion of
2//! this crate, to allow for implementation of the proto message field reflection API.
3use std::io::{
4    Cursor,
5    Result,
6};
7
8use crate::descriptor::MessageDescriptor;
9use crate::Message as ConcreteMessage;
10
11pub trait Message {
12    fn erased_descriptor(&self) -> Option<MessageDescriptor>;
13    fn erased_compute_size(&self) -> usize;
14    fn erased_compute_grpc_slices_size(&self) -> usize;
15    fn erased_serialize(&self) -> Vec<u8>;
16    fn erased_deserialize(&mut self, r: &[u8]) -> Result<()>;
17}
18
19impl<T> Message for T
20where
21    T: ConcreteMessage,
22{
23    fn erased_descriptor(&self) -> Option<MessageDescriptor> {
24        self.descriptor()
25    }
26
27    fn erased_compute_size(&self) -> usize {
28        self.compute_size()
29    }
30
31    fn erased_compute_grpc_slices_size(&self) -> usize {
32        self.compute_grpc_slices_size()
33    }
34
35    fn erased_serialize(&self) -> Vec<u8> {
36        self.serialize_to_vec()
37    }
38
39    fn erased_deserialize(&mut self, r: &[u8]) -> Result<()> {
40        self.deserialize(&mut Cursor::new(r))
41    }
42}