wral/
util.rs

1use mkit::cbor::IntoCbor;
2
3use std::{fs, io::Write};
4
5use crate::{Error, Result};
6
7pub fn encode_cbor<T>(val: T) -> Result<Vec<u8>>
8where
9    T: IntoCbor,
10{
11    let mut data: Vec<u8> = vec![];
12    let n = val.into_cbor()?.encode(&mut data)?;
13    if n != data.len() {
14        err_at!(Fatal, msg: "cbor encoding len mistmatch {} {}", n, data.len())
15    } else {
16        Ok(data)
17    }
18}
19
20pub fn sync_write(file: &mut fs::File, data: &[u8]) -> Result<usize> {
21    let n = err_at!(IOError, file.write(data))?;
22    if n != data.len() {
23        err_at!(IOError, msg: "partial write to file {} {}", n, data.len())?
24    }
25    err_at!(IOError, file.sync_all())?;
26    Ok(n)
27}