From c16c95056bb2c67fd5e4253e2bc109b9bc68367a Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 24 Nov 2019 12:49:22 +0800 Subject: [PATCH] add opt.rs --- src/main.rs | 43 +++++-------------------------------------- src/opt.rs | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 src/opt.rs diff --git a/src/main.rs b/src/main.rs index 55d8c31..96dab99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +mod opt; + use rust_util::{ XResult, new_box_ioerror, @@ -30,8 +32,10 @@ use indicatif::{ ProgressBar, ProgressStyle }; -use argparse::{ArgumentParser, StoreTrue, Store, List}; use libsm::sm3::hash::Sm3Hash; +use opt::{ + Options, +}; const FILE_SIZE_1GB: u64 = 1024 * 1024 * 1024; const BUFF_SIZE: usize = 512 * 1024; @@ -41,42 +45,6 @@ const PB_TEMPLATE: &str = "{spinner:.green} [{elapsed_precise}] [{bar:40.cyan/bl const VERSION: &str = env!("CARGO_PKG_VERSION"); const GIT_HASH: &str = env!("GIT_HASH"); - -pub struct Options { - pub version: bool, - pub algorithm: String, - pub file_name_list: Vec, -} - -impl Options { - pub fn new() -> Options { - Options { - version: false, - algorithm: "SHA256".to_string(), - file_name_list: Vec::new(), - } - } - - pub fn parse_args(&mut self) -> XResult<()> { - { - let mut ap = ArgumentParser::new(); - ap.set_description("digest - command line digest tool."); - ap.refer(&mut self.algorithm).add_option(&["-a", "--algorithm"], Store, "Algorithm, e.g. SHA256, SM3"); - ap.refer(&mut self.version).add_option(&["-v", "--version"], StoreTrue, "Print version"); - ap.refer(&mut self.file_name_list).add_argument("File names", List, "File names to be digested"); - ap.parse_args_or_exit(); - } - - Ok(()) - } - - pub fn new_and_parse_args() -> XResult { - let mut options = Options::new(); - options.parse_args()?; - Ok(options) - } -} - fn main() -> XResult<()> { let options = Options::new_and_parse_args()?; @@ -206,7 +174,6 @@ fn calc_file_digest(digest: &mut dyn Digest, file_name: &str) -> XResult } } - fn read_full_stdin() -> XResult> { let mut buf: [u8; BUFF_SIZE] = [0u8; BUFF_SIZE]; let mut ret: Vec = Vec::new(); diff --git a/src/opt.rs b/src/opt.rs new file mode 100644 index 0000000..eca2ed9 --- /dev/null +++ b/src/opt.rs @@ -0,0 +1,37 @@ +use rust_util::XResult; +use argparse::{ArgumentParser, StoreTrue, Store, List}; + +pub struct Options { + pub version: bool, + pub algorithm: String, + pub file_name_list: Vec, +} + +impl Options { + pub fn new() -> Options { + Options { + version: false, + algorithm: "SHA256".to_string(), + file_name_list: Vec::new(), + } + } + + pub fn parse_args(&mut self) -> XResult<()> { + { + let mut ap = ArgumentParser::new(); + ap.set_description("digest - command line digest tool."); + ap.refer(&mut self.algorithm).add_option(&["-a", "--algorithm"], Store, "Algorithm, e.g. SHA256, SM3"); + ap.refer(&mut self.version).add_option(&["-v", "--version"], StoreTrue, "Print version"); + ap.refer(&mut self.file_name_list).add_argument("File names", List, "File names to be digested"); + ap.parse_args_or_exit(); + } + + Ok(()) + } + + pub fn new_and_parse_args() -> XResult { + let mut options = Options::new(); + options.parse_args()?; + Ok(options) + } +}