upend/db/src/util.rs

44 lines
1022 B
Rust

use std::path::Path;
use filebuffer::FileBuffer;
use tracing::{debug, trace};
use upend_base::hash::UpMultihash;
#[derive(Default)]
pub struct LoggerSink {
pub buffer: Vec<u8>,
}
impl std::io::Write for LoggerSink {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.buffer.extend(buf.iter());
if self.buffer.ends_with(b"\n") {
self.flush()?;
}
Ok(buf.len())
}
fn flush(&mut self) -> std::io::Result<()> {
use std::str;
debug!(
"{}",
str::from_utf8(self.buffer.as_mut())
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?
.trim()
);
Ok(())
}
}
pub fn hash_at_path<P: AsRef<Path>>(path: P) -> crate::Result<UpMultihash> {
let path = path.as_ref();
trace!("Hashing {:?}...", path);
let fbuffer = FileBuffer::open(path)?;
trace!("Finished hashing {:?}...", path);
Ok(upend_base::hash::sha256hash(&fbuffer)?)
}