use std::io::Write; use crate::CodedOutputStream; pub(crate) trait WithCodedOutputStream { fn with_coded_output_stream(self, cb: F) -> crate::Result where F: FnOnce(&mut CodedOutputStream) -> crate::Result; } impl<'a> WithCodedOutputStream for &'a mut (dyn Write + 'a) { fn with_coded_output_stream(self, cb: F) -> crate::Result where F: FnOnce(&mut CodedOutputStream) -> crate::Result, { let mut os = CodedOutputStream::new(self); let r = cb(&mut os)?; os.flush()?; Ok(r) } } impl<'a> WithCodedOutputStream for &'a mut Vec { fn with_coded_output_stream(mut self, cb: F) -> crate::Result where F: FnOnce(&mut CodedOutputStream) -> crate::Result, { let mut os = CodedOutputStream::vec(&mut self); let r = cb(&mut os)?; os.flush()?; Ok(r) } }