TextWriter::encode for Vec<u8>

This commit is contained in:
Tony Garnock-Jones 2021-08-02 21:49:40 +02:00
parent e80d849f9a
commit e913951b91
2 changed files with 22 additions and 3 deletions

View File

@ -16,14 +16,13 @@ use super::super::writer::{Writer, CompoundWriter, varint};
pub struct PackedWriter<W: io::Write>(Suspendable<W>);
impl PackedWriter<Vec<u8>> {
impl PackedWriter<&mut Vec<u8>> {
pub fn encode<D: Embeddable, N: NestedValue<D>, Enc: DomainEncode<D>>(
enc: &mut Enc,
v: &N,
) -> io::Result<Vec<u8>> {
let mut buf: Vec<u8> = Vec::new();
let w = &mut PackedWriter::new(&mut buf);
w.write(enc, v)?;
PackedWriter::new(&mut buf).write(enc, v)?;
Ok(buf)
}

View File

@ -1,3 +1,8 @@
use crate::value::DomainEncode;
use crate::value::Embeddable;
use crate::value::IOValue;
use crate::value::IOValueDomainCodec;
use crate::value::NestedValue;
use crate::value::Writer;
use crate::value::suspendable::Suspendable;
use crate::value::writer::CompoundWriter;
@ -28,6 +33,21 @@ impl std::default::Default for CommaStyle {
}
}
impl TextWriter<&mut Vec<u8>> {
pub fn encode<D: Embeddable, N: NestedValue<D>, Enc: DomainEncode<D>>(
enc: &mut Enc,
v: &N,
) -> io::Result<Vec<u8>> {
let mut buf: Vec<u8> = Vec::new();
TextWriter::new(&mut buf).write(enc, v)?;
Ok(buf)
}
pub fn encode_iovalue(v: &IOValue) -> io::Result<Vec<u8>> {
Self::encode(&mut IOValueDomainCodec, v)
}
}
impl<W: io::Write> TextWriter<W> {
pub fn new(w: W) -> Self {
TextWriter {