-
Notifications
You must be signed in to change notification settings - Fork 16
/
decode.rs
34 lines (29 loc) · 1.03 KB
/
decode.rs
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
use protobuf::descriptor::FileDescriptorSet;
use protobuf::CodedInputStream;
use serde::Serializer;
use serde_protobuf::de::Deserializer;
use serde_protobuf::descriptor::Descriptors;
pub struct PqDecoder<'a> {
pub descriptors: Descriptors,
pub message_type: &'a str,
}
impl<'a> PqDecoder<'a> {
pub fn new(loaded_descs: Vec<FileDescriptorSet>, message_type: &str) -> PqDecoder<'_> {
let mut descriptors = Descriptors::new();
for fdset in loaded_descs {
descriptors.add_file_set_proto(&fdset);
}
descriptors.resolve_refs();
PqDecoder {
descriptors,
message_type,
}
}
pub fn transcode_message<S: Serializer>(&self, data: &[u8], out: S) {
let stream = CodedInputStream::from_bytes(data);
let mut deserializer =
Deserializer::for_named_message(&self.descriptors, self.message_type, stream)
.expect("could not init deserializer");
serde_transcode::transcode(&mut deserializer, out).unwrap();
}
}