1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
use std::fmt::Debug;
use std::usize;
use bytes::{Buf, BufMut, IntoBuf};
use DecodeError;
use EncodeError;
use encoding::*;
pub trait Message: Debug + Send + Sync {
#[doc(hidden)]
fn encode_raw<B>(&self, buf: &mut B) where B: BufMut, Self: Sized;
#[doc(hidden)]
fn merge_field<B>(&mut self, buf: &mut B) -> Result<(), DecodeError> where B: Buf, Self: Sized;
fn encoded_len(&self) -> usize;
fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError> where B: BufMut, Self: Sized {
let required = self.encoded_len();
let remaining = buf.remaining_mut();
if required > buf.remaining_mut() {
return Err(EncodeError::new(required, remaining));
}
self.encode_raw(buf);
Ok(())
}
fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError> where B: BufMut, Self: Sized {
let len = self.encoded_len();
let required = len + encoded_len_varint(len as u64);
let remaining = buf.remaining_mut();
if required > remaining {
return Err(EncodeError::new(required, remaining))
}
encode_varint(len as u64, buf);
self.encode_raw(buf);
Ok(())
}
fn decode<B>(buf: B) -> Result<Self, DecodeError> where B: IntoBuf, Self: Default {
let mut message = Self::default();
Self::merge(&mut message, &mut buf.into_buf()).map(|_| message)
}
fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError> where B: IntoBuf, Self: Default {
let mut message = Self::default();
message.merge_length_delimited(buf)?;
Ok(message)
}
fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError> where B: IntoBuf, Self: Sized {
let mut buf = buf.into_buf();
while buf.has_remaining() {
self.merge_field(&mut buf)?;
}
Ok(())
}
fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError> where B: IntoBuf, Self: Sized {
message::merge(WireType::LengthDelimited, self, &mut buf.into_buf())
}
fn clear(&mut self);
}
impl <M> Message for Box<M> where M: Message {
fn encode_raw<B>(&self, buf: &mut B) where B: BufMut {
(**self).encode_raw(buf)
}
fn merge_field<B>(&mut self, buf: &mut B) -> Result<(), DecodeError> where B: Buf {
(**self).merge_field(buf)
}
fn encoded_len(&self) -> usize {
(**self).encoded_len()
}
fn clear(&mut self) {
(**self).clear()
}
}