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