use std::io; use super::BinarySource; use super::Embeddable; use super::IOValue; use super::Reader; use super::Writer; use super::packed::PackedReader; pub trait DomainDecode { fn decode_embedded<'de, 'src, S: BinarySource<'de>>( &mut self, src: &'src mut S, read_annotations: bool, ) -> io::Result; } pub trait DomainEncode { fn encode_embedded( &mut self, w: &mut W, d: &D, ) -> io::Result<()>; } pub struct IOValueDomainCodec; impl DomainDecode for IOValueDomainCodec { fn decode_embedded<'de, 'src, S: BinarySource<'de>>( &mut self, src: &'src mut S, read_annotations: bool, ) -> io::Result { PackedReader::new(src, IOValueDomainCodec).demand_next(read_annotations) } } impl DomainEncode for IOValueDomainCodec { fn encode_embedded( &mut self, w: &mut W, d: &IOValue, ) -> io::Result<()> { w.write(self, d) } } pub struct NoEmbeddedDomainCodec; impl DomainDecode for NoEmbeddedDomainCodec { fn decode_embedded<'de, 'src, S: BinarySource<'de>>( &mut self, _src: &'src mut S, _read_annotations: bool, ) -> io::Result { Err(std::io::Error::new(std::io::ErrorKind::Unsupported, "Embedded values not supported here")) } } impl DomainEncode for NoEmbeddedDomainCodec { fn encode_embedded( &mut self, _w: &mut W, _d: &D, ) -> io::Result<()> { Err(std::io::Error::new(std::io::ErrorKind::Unsupported, "Embedded values not supported here")) } }