1use std::io;
2use std::io::Read;
3
4use ciborium::Value;
5
6#[derive(Default)]
7pub struct Col {
8 pub length: i32,
10
11 pub raw: Vec<u8>,
12}
13
14impl Col {
15 pub fn from_rdr<R>(rdr: &mut R) -> Result<Self, io::Error>
16 where
17 R: Read,
18 {
19 let mut buf: [u8; 4] = [0; 4];
20 rdr.read_exact(&mut buf)?;
21 let length: i32 = i32::from_be_bytes(buf);
22 match length {
23 -1 => Ok(Self {
24 length,
25 raw: vec![],
26 }),
27 _ => {
28 let mut raw: Vec<u8> = vec![0; length as usize];
29 let buf: &mut [u8] = &mut raw;
30 rdr.read_exact(buf)?;
31 Ok(Self { length, raw })
32 }
33 }
34 }
35}
36
37impl Col {
38 pub fn into_cbor_value(self) -> Value {
39 match self.length {
40 -1 => Value::Null,
41 _ => Value::Bytes(self.raw),
42 }
43 }
44}