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()
}
}