feat: create digest engine with Sha256/Md5/None and integrate with save mode

This commit is contained in:
Andrew Phillips (aider)
2025-05-12 18:21:34 -03:00
parent f6b6bc5768
commit 41060c3029
5 changed files with 130 additions and 0 deletions

37
src/digest_engine.rs Normal file
View 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()),
}
}