feat: create digest engine with Sha256/Md5/None and integrate with save mode
This commit is contained in:
37
src/digest_engine.rs
Normal file
37
src/digest_engine.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use std::io;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use log::*;
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
pub mod none;
|
||||
pub mod sha2;
|
||||
pub mod program;
|
||||
|
||||
use crate::digest_engine::none::DigestEngineNone;
|
||||
use crate::digest_engine::sha2::DigestEngineSha256;
|
||||
use crate::digest_engine::program::DigestEngineProgram;
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Clone, strum::EnumIter, strum::Display, strum::EnumString, Enum)]
|
||||
#[strum(ascii_case_insensitive)]
|
||||
pub enum DigestType {
|
||||
Sha256,
|
||||
Md5,
|
||||
None,
|
||||
}
|
||||
|
||||
pub trait DigestEngine {
|
||||
fn create(&self) -> Box<dyn DigestEngine>;
|
||||
|
||||
fn update(&mut self, data: &[u8]) -> io::Result<()>;
|
||||
|
||||
fn finalize(&mut self) -> io::Result<String>;
|
||||
}
|
||||
|
||||
pub fn get_engine(digest_type: DigestType) -> Box<dyn DigestEngine> {
|
||||
match digest_type {
|
||||
DigestType::Sha256 => Box::new(DigestEngineSha256::new()),
|
||||
DigestType::Md5 => Box::new(DigestEngineProgram::new("md5sum")),
|
||||
DigestType::None => Box::new(DigestEngineNone::new()),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user