refactor: update digest engine to use Result and Write, add is_supported method
This commit is contained in:
committed by
Andrew Phillips (aider)
parent
1aba71a3d6
commit
4ee0715e39
@@ -1,15 +1,22 @@
|
||||
use anyhow::{anyhow, Context, Result};
|
||||
use std::io;
|
||||
use std::io::{Read, Write};
|
||||
|
||||
use log::*;
|
||||
|
||||
use lazy_static::lazy_static;
|
||||
|
||||
extern crate enum_map;
|
||||
use enum_map::enum_map;
|
||||
use enum_map::{Enum, EnumMap};
|
||||
|
||||
pub mod none;
|
||||
pub mod sha2_digest;
|
||||
pub mod program;
|
||||
pub mod sha2;
|
||||
|
||||
use crate::digest_engine::none::DigestEngineNone;
|
||||
use crate::digest_engine::sha2_digest::DigestEngineSha256;
|
||||
use crate::digest_engine::program::DigestEngineProgram;
|
||||
|
||||
use enum_map::Enum;
|
||||
use crate::digest_engine::sha2::DigestEngineSha256;
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Clone, strum::EnumIter, strum::Display, strum::EnumString, Enum)]
|
||||
#[strum(ascii_case_insensitive)]
|
||||
@@ -20,17 +27,29 @@ pub enum DigestType {
|
||||
}
|
||||
|
||||
pub trait DigestEngine {
|
||||
fn create(&self) -> Box<dyn DigestEngine>;
|
||||
|
||||
fn update(&mut self, data: &[u8]) -> io::Result<()>;
|
||||
|
||||
fn is_supported(&self) -> bool {
|
||||
true
|
||||
}
|
||||
fn create(&self) -> Result<Box<dyn Write>>;
|
||||
fn finalize(&mut self) -> io::Result<String>;
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
pub static ref DIGEST_PROGRAMS: EnumMap<DigestType, Option<DigestEngineProgram>> = enum_map! {
|
||||
DigestType::Sha256 => None,
|
||||
DigestType::Md5 => {
|
||||
let program = DigestEngineProgram::new("bzip2", vec![]);
|
||||
if program.supported { Some(program) } else { None }
|
||||
}
|
||||
DigestType::None => None
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
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::Md5 => Box::new(DigestEngineProgram::new("md5sum", vec![])),
|
||||
DigestType::None => Box::new(DigestEngineNone::new()),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user