1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
use crate::error; use crate::value; use serde; use serde_cbor; use std::fmt; use std::io; pub struct Source<R>(serde_cbor::de::Deserializer<serde_cbor::de::IoRead<R>>) where R: io::Read; pub struct Sink<W>(serde_cbor::ser::Serializer<serde_cbor::ser::IoWrite<W>>) where W: io::Write; #[inline] pub fn source<R>(r: R) -> Source<R> where R: io::Read, { Source(serde_cbor::de::Deserializer::new( serde_cbor::de::IoRead::new(r), )) } #[inline] pub fn sink<W>(w: W) -> Sink<W> where W: io::Write, { Sink(serde_cbor::ser::Serializer::new( serde_cbor::ser::IoWrite::new(w), )) } impl<R> value::Source for Source<R> where R: io::Read, { #[inline] fn read(&mut self) -> error::Result<Option<value::Value>> { match serde::Deserialize::deserialize(&mut self.0) { Ok(v) => Ok(Some(v)), Err(e) => match e.classify() { serde_cbor::error::Category::Eof => Ok(None), _ => Err(error::Error::from(e)), }, } } } impl<W> value::Sink for Sink<W> where W: io::Write, { #[inline] fn write(&mut self, v: value::Value) -> error::Result<()> { serde::Serialize::serialize(&v, &mut self.0).map_err(From::from) } } impl<R> fmt::Debug for Source<R> where R: io::Read, { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_struct("CborSource").finish() } } impl<W> fmt::Debug for Sink<W> where W: io::Write, { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_struct("CborSink").finish() } }