cbor_cli/
inspect.rs

1use std::{io, process};
2
3pub fn inspect_from_reader<R: io::Read, W: io::Write>(reader: R, mut writer: W) -> Result<(), std::io::Error> {
4  serde_cbor::de::Deserializer::from_reader(reader)
5    .into_iter::<serde_cbor::Value>()
6    .map(|v| match v {
7      Ok(v) => v,
8      Err(e) => {
9        eprintln!("Error: {:?} {} {:?}", e.classify(), e.offset(), e);
10        process::exit(1);
11      }
12    })
13    .try_for_each(|v| {
14      writer.write_all(format!("{:?}\n", v).as_bytes())?;
15      io::Result::Ok(())
16    })
17}
18
19#[cfg(test)]
20mod tests {
21  use super::*;
22  use common_testing::assert;
23
24  #[test]
25  fn test_inspect_from_reader() {
26    // Inspects some CBOR data.
27    let input = [0x82, 0x01, 0x02];
28    let mut output = Vec::new();
29    inspect_from_reader(&input[..], &mut output).unwrap();
30    // println!("{}", String::from_utf8(output.clone()).unwrap());
31    assert::equal(output, b"Array([Integer(1), Integer(2)])\n".as_slice());
32  }
33}