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}