+ #[inline]
+ fn size_hint(&mut self, _size: usize) { }
+}
+
+pub(crate) struct WriterWriteAdaptor<'a, W: Writer + 'a>(pub &'a mut W);
+impl<'a, W: Writer + 'a> Write for WriterWriteAdaptor<'a, W> {
+ fn write_all(&mut self, buf: &[u8]) -> Result<(), ::std::io::Error> {
+ self.0.write_all(buf)
+ }
+ fn write(&mut self, buf: &[u8]) -> Result<usize, ::std::io::Error> {
+ self.0.write_all(buf)?;
+ Ok(buf.len())
+ }
+ fn flush(&mut self) -> Result<(), ::std::io::Error> {
+ Ok(())
+ }
+}
+
+struct VecWriter(Vec<u8>);
+impl Writer for VecWriter {
+ fn write_all(&mut self, buf: &[u8]) -> Result<(), ::std::io::Error> {
+ self.0.extend_from_slice(buf);
+ Ok(())
+ }
+ fn size_hint(&mut self, size: usize) {
+ self.0.reserve_exact(size);
+ }