diff --git a/src/modes/common.rs b/src/modes/common.rs index 11de58b..85fc188 100644 --- a/src/modes/common.rs +++ b/src/modes/common.rs @@ -1,15 +1,19 @@ use humansize::{BINARY, FormatSizeOptions}; +use clap::Command; use log::debug; use prettytable::format::TableFormat; +use clap::error::ErrorKind; use regex::Regex; use std::collections::HashMap; use std::env; use rusqlite::Connection; +use std::str::FromStr; use crate::db::Item; use crate::db::Meta; use crate::db::store_meta; +use crate::compression_engine::CompressionType; use crate::digest_engine::DigestType; -use crate::digest_engine::get_digest_type_meta; +use crate::Args; pub fn get_meta_from_env() -> HashMap { debug!("MAIN: Getting meta from KEEP_META_*"); @@ -97,6 +101,11 @@ pub fn get_format_box_chars_no_border_line_separator() -> TableFormat { .build() } + +pub fn get_digest_type_meta(digest_type: DigestType) -> String { + format!("digest_{}", digest_type.to_string().to_lowercase()) +} + pub fn store_item_digest_value( conn: &mut Connection, item: Item, @@ -113,3 +122,41 @@ pub fn store_item_digest_value( store_meta(conn, digest_meta)?; Ok(()) } + +pub fn cmd_args_digest_type(cmd: &mut Command, args: Args) -> DigestType { + let digest_name = args + .item + .digest + .clone() + .unwrap_or(DigestType::Sha256.to_string()); + + let digest_type_opt = DigestType::from_str(&digest_name); + if digest_type_opt.is_err() { + cmd.error( + ErrorKind::InvalidValue, + format!("Unknown digest type: {}", digest_name), + ) + .exit(); + } + + digest_type_opt.unwrap() +} + +pub fn cmd_args_compression_type(cmd: &mut Command, args: Args) -> CompressionType { + let compression_name = args + .item + .compression + .clone() + .unwrap_or(CompressionType::LZ4.to_string()); + + let compression_type_opt = CompressionType::from_str(&compression_name); + if compression_type_opt.is_err() { + cmd.error( + ErrorKind::InvalidValue, + format!("Unknown compression type: {}", compression_name), + ) + .exit(); + } + + compression_type_opt.unwrap() +} diff --git a/src/modes/save.rs b/src/modes/save.rs index 04a7273..cd33a16 100644 --- a/src/modes/save.rs +++ b/src/modes/save.rs @@ -1,8 +1,8 @@ -use anyhow::{Context, Result, anyhow}; +use gethostname::gethostname; +use anyhow::{anyhow, Context, Result}; use is_terminal::IsTerminal; use std::collections::HashMap; -use std::io::{self, Read}; -use std::str::FromStr; +use std::io::{self, Read, Write}; use clap::Command; use clap::error::ErrorKind; @@ -10,10 +10,10 @@ use log::debug; use rusqlite::Connection; use std::path::PathBuf; -use crate::compression_engine::{CompressionType, get_compression_engine}; +use crate::compression_engine::get_compression_engine; use crate::db::{self}; -use crate::digest_engine::{DigestType, get_digest_engine}; -use crate::modes::common::{get_meta_from_env, store_item_digest_value}; +use crate::digest_engine::get_digest_engine; +use crate::modes::common::{get_meta_from_env, store_item_digest_value, cmd_args_compression_type, cmd_args_digest_type}; use chrono::Utc; pub fn mode_save( @@ -36,35 +36,14 @@ pub fn mode_save( tags.push("none".to_string()); } - // Get the digest type to use - let digest_name = args - .item - .digest - .clone() - .unwrap_or(DigestType::Sha256.to_string()); - - let compression_name = args - .item - .compression - .unwrap_or(crate::compression_engine::default_compression_type().to_string()); - - use gethostname::gethostname; - use std::io::Write; - let compression_type_opt = CompressionType::from_str(&compression_name); - if compression_type_opt.is_err() { - cmd.error( - ErrorKind::InvalidValue, - format!("Unknown compression type: {}", compression_name), - ) - .exit(); - } - - let compression_type = compression_type_opt.unwrap(); + let digest_type = cmd_args_digest_type(cmd, args); + let compression_type = cmd_args_compression_type(cmd, args); debug!("MAIN: Compression type: {}", compression_type); + debug!("MAIN: Digest type: {}", digest_type); - // Create a new digest engine - let digest_type = DigestType::from_str(&digest_name).unwrap_or(DigestType::Sha256); let mut digest_engine = get_digest_engine(digest_type.clone()); + let compression_engine = + get_compression_engine(compression_type.clone()).expect("Unable to get compression engine"); let mut item = db::Item { id: None, @@ -133,8 +112,6 @@ pub fn mode_save( let mut stdout = io::stdout().lock(); let mut buffer = [0; libc::BUFSIZ as usize]; - let compression_engine = - get_compression_engine(compression_type.clone()).expect("Unable to get compression engine"); let mut item_out: Box = compression_engine .create(item_path.clone())