protobuf/coded_output_stream/
with.rs
1use std::io::Write;
2
3use crate::CodedOutputStream;
4
5pub(crate) trait WithCodedOutputStream {
6 fn with_coded_output_stream<T, F>(self, cb: F) -> crate::Result<T>
7 where
8 F: FnOnce(&mut CodedOutputStream) -> crate::Result<T>;
9}
10
11impl<'a> WithCodedOutputStream for &'a mut (dyn Write + 'a) {
12 fn with_coded_output_stream<T, F>(self, cb: F) -> crate::Result<T>
13 where
14 F: FnOnce(&mut CodedOutputStream) -> crate::Result<T>,
15 {
16 let mut os = CodedOutputStream::new(self);
17 let r = cb(&mut os)?;
18 os.flush()?;
19 Ok(r)
20 }
21}
22
23impl<'a> WithCodedOutputStream for &'a mut Vec<u8> {
24 fn with_coded_output_stream<T, F>(mut self, cb: F) -> crate::Result<T>
25 where
26 F: FnOnce(&mut CodedOutputStream) -> crate::Result<T>,
27 {
28 let mut os = CodedOutputStream::vec(&mut self);
29 let r = cb(&mut os)?;
30 os.flush()?;
31 Ok(r)
32 }
33}