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

use {
    anyhow::Result,
    std::{
        fs::File,
        io,
        path::Path,
    },
};

#[derive(Debug, PartialEq, Eq, Hash)]
pub struct FileHash {
    hash: blake3::Hash,
}

impl FileHash {
    pub fn new<P: AsRef<Path>>(path: P) -> Result<Self> {
        let mut file = File::open(path)?;
        let mut hasher = blake3::Hasher::new();
        io::copy(&mut file, &mut hasher)?;
        let hash = hasher.finalize();
        Ok(Self {
            hash,
        })
    }
}