• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::io::Write;
2 
3 use crate::CodedOutputStream;
4 
5 pub(crate) trait WithCodedOutputStream {
with_coded_output_stream<T, F>(self, cb: F) -> crate::Result<T> where F: FnOnce(&mut CodedOutputStream) -> crate::Result<T>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 
11 impl<'a> WithCodedOutputStream for &'a mut (dyn Write + 'a) {
with_coded_output_stream<T, F>(self, cb: F) -> crate::Result<T> where F: FnOnce(&mut CodedOutputStream) -> crate::Result<T>,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 
23 impl<'a> WithCodedOutputStream for &'a mut Vec<u8> {
with_coded_output_stream<T, F>(mut self, cb: F) -> crate::Result<T> where F: FnOnce(&mut CodedOutputStream) -> crate::Result<T>,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 }
34