From 9d00f05f1c38e9588b50c2241c912e5209c759bc Mon Sep 17 00:00:00 2001 From: "Tim \"S.D.Eagle\" Zeitz" Date: Tue, 6 Jul 2021 11:31:22 +0200 Subject: [PATCH] more refactoring --- rustfmt.toml | 1 + src/bin/compare_vector.rs | 79 ++++++++++++++++++++------------------- src/bin/decode_vector.rs | 63 ++++++++++++++----------------- src/bin/encode_vector.rs | 53 ++++++++++++-------------- 4 files changed, 93 insertions(+), 103 deletions(-) create mode 100644 rustfmt.toml diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..b28d8cf --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +max_width = 160 diff --git a/src/bin/compare_vector.rs b/src/bin/compare_vector.rs index 0a18492..9aab030 100644 --- a/src/bin/compare_vector.rs +++ b/src/bin/compare_vector.rs @@ -1,45 +1,38 @@ -use stud_rust_base::{io::*, cli::CliErr}; -use std::{env, fmt::Display, error::Error}; +use std::{env, error::Error, fmt::Display}; +use stud_rust_base::{cli::CliErr, io::*}; fn main() -> Result<(), Box> { - match &env::args().skip(1).collect::>()[..] { - [data_type, input1, input2] => { + let mut args = env::args().skip(1); + match &(args.next(), args.next(), args.next()) { + (Some(data_type), Some(input1), Some(input2)) => { match data_type.as_ref() { - "i8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "u8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "i16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "u16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "i32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "u32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "i64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "u64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "f32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "f64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "int8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "uint8" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "int16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "uint16" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "int32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "uint32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "int64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "uint64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "float32" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, - "float64" => { compare_values(&Vec::::load_from(input1)?, &Vec::::load_from(input2)?); Ok(()) }, + "i8" | "int8" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "u8" | "uint8" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "i16" | "int16" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "u16" | "uint16" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "i32" | "int32" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "u32" | "uint32" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "i64" | "int64" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "u64" | "uint64" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "f32" | "float32" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), + "f64" | "float64" => compare_values::(&Vec::load_from(input1)?, &Vec::load_from(input2)?), _ => { print_usage(); - Err(Box::new(CliErr("Invalid data type"))) + return Err(Box::new(CliErr("Invalid data type"))); } - } - }, + }; + Ok(()) + } _ => { print_usage(); Err(Box::new(CliErr("Invalid arguments"))) - }, + } } } fn print_usage() { - eprintln!("Usage: decode_vector data_type vector1_file vector2_file + eprintln!( + "Usage: decode_vector data_type vector1_file vector2_file Compares two vectors of elements in binary format. data_type can be one of * i8 @@ -53,17 +46,23 @@ Compares two vectors of elements in binary format. data_type can be one of * f32 * f64 -"); +" + ); } -fn compare_values(values1: &[T], values2: &[T]) where +fn compare_values(values1: &[T], values2: &[T]) +where T: Display, - T: PartialOrd + T: PartialOrd, { if values1.len() != values2.len() { println!("0"); - eprintln!("Can only compare vectors of equal size. The first vector has {} elements. The second vector has {} elements.", values1.len(), values2.len()); - return + eprintln!( + "Can only compare vectors of equal size. The first vector has {} elements. The second vector has {} elements.", + values1.len(), + values2.len() + ); + return; } let mut v1_smaller_count = 0; @@ -71,8 +70,12 @@ fn compare_values(values1: &[T], values2: &[T]) where let mut first_diff = None; for (i, (v1, v2)) in values1.iter().zip(values2.iter()).enumerate() { - if v1 < v2 { v1_smaller_count += 1; } - if v2 < v1 { v2_smaller_count += 1; } + if v1 < v2 { + v1_smaller_count += 1; + } + if v2 < v1 { + v2_smaller_count += 1; + } if first_diff.is_none() && v1 != v2 { first_diff = Some(i) @@ -89,10 +92,10 @@ fn compare_values(values1: &[T], values2: &[T]) where eprintln!("{} elements are different.", v1_smaller_count + v2_smaller_count); eprintln!("The vectors have {} elements.", values1.len()); eprintln!("The first element that differs is at index {}.", index); - }, + } None => { println!("{}", values1.len()); eprintln!("The vectors are the same and have {} elements.", values1.len()); - }, + } } } diff --git a/src/bin/decode_vector.rs b/src/bin/decode_vector.rs index 68d5bb2..6169732 100644 --- a/src/bin/decode_vector.rs +++ b/src/bin/decode_vector.rs @@ -1,45 +1,36 @@ -use stud_rust_base::{io::*, cli::CliErr}; use std::{env, error::Error}; +use stud_rust_base::{cli::CliErr, io::*}; fn main() -> Result<(), Box> { - match &env::args().skip(1).collect::>()[..] { - [data_type, input] => { - match data_type.as_ref() { - "i8" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "u8" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "i16" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "u16" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "i32" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "u32" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "i64" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "u64" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "f32" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "f64" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "int8" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "uint8" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "int16" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "uint16" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "int32" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "uint32" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "int64" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "uint64" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "float32" => { print_values(Vec::::load_from(input)?); Ok(()) }, - "float64" => { print_values(Vec::::load_from(input)?); Ok(()) }, - _ => { - print_usage(); - Err(Box::new(CliErr("Invalid data type"))) - } + let mut args = env::args().skip(1); + match (args.next(), args.next()) { + (Some(data_type), Some(ref input)) => match data_type.as_ref() { + "i8" | "int8" => print_values(Vec::::load_from(input)?), + "u8" | "uint8" => print_values(Vec::::load_from(input)?), + "i16" | "int16" => print_values(Vec::::load_from(input)?), + "u16" | "uint16" => print_values(Vec::::load_from(input)?), + "i32" | "int32" => print_values(Vec::::load_from(input)?), + "u32" | "uint32" => print_values(Vec::::load_from(input)?), + "i64" | "int64" => print_values(Vec::::load_from(input)?), + "u64" | "uint64" => print_values(Vec::::load_from(input)?), + "f32" | "float32" => print_values(Vec::::load_from(input)?), + "f64" | "float64" => print_values(Vec::::load_from(input)?), + _ => { + print_usage(); + return Err(Box::new(CliErr("Invalid data type"))); } }, _ => { print_usage(); - Err(Box::new(CliErr("Invalid arguments"))) - }, - } + return Err(Box::new(CliErr("Invalid arguments"))); + } + }; + Ok(()) } fn print_usage() { - eprintln!("Usage: decode_vector data_type input_vector_file + eprintln!( + "Usage: decode_vector data_type input_vector_file Reads binary data from input_vector_file and writes the data to the standard output. data_type can be one of * i8 @@ -53,13 +44,15 @@ Reads binary data from input_vector_file and writes the data to the standard out * f32 * f64 -"); +" + ); } use std::fmt::Display; -fn print_values(values: Vec) where - T: Display +fn print_values(values: Vec) +where + T: Display, { for v in values { println!("{}", v); diff --git a/src/bin/encode_vector.rs b/src/bin/encode_vector.rs index d8235bd..a56eb82 100644 --- a/src/bin/encode_vector.rs +++ b/src/bin/encode_vector.rs @@ -1,40 +1,32 @@ -use stud_rust_base::{io::*, cli::CliErr}; use std::{env, error::Error}; +use stud_rust_base::{cli::CliErr, io::*}; fn main() -> Result<(), Box> { - match &env::args().skip(1).collect::>()[..] { - [data_type, output] => { + let mut args = env::args().skip(1); + match (args.next(), args.next()) { + (Some(data_type), Some(ref output)) => { match data_type.as_ref() { - "i8" => { parse_input::()?.write_to(output)?; Ok(()) }, - "u8" => { parse_input::()?.write_to(output)?; Ok(()) }, - "i16" => { parse_input::()?.write_to(output)?; Ok(()) }, - "u16" => { parse_input::()?.write_to(output)?; Ok(()) }, - "i32" => { parse_input::()?.write_to(output)?; Ok(()) }, - "u32" => { parse_input::()?.write_to(output)?; Ok(()) }, - "i64" => { parse_input::()?.write_to(output)?; Ok(()) }, - "u64" => { parse_input::()?.write_to(output)?; Ok(()) }, - "f32" => { parse_input::()?.write_to(output)?; Ok(()) }, - "f64" => { parse_input::()?.write_to(output)?; Ok(()) }, - "int8" => { parse_input::()?.write_to(output)?; Ok(()) }, - "uint8" => { parse_input::()?.write_to(output)?; Ok(()) }, - "int16" => { parse_input::()?.write_to(output)?; Ok(()) }, - "uint16" => { parse_input::()?.write_to(output)?; Ok(()) }, - "int32" => { parse_input::()?.write_to(output)?; Ok(()) }, - "uint32" => { parse_input::()?.write_to(output)?; Ok(()) }, - "int64" => { parse_input::()?.write_to(output)?; Ok(()) }, - "uint64" => { parse_input::()?.write_to(output)?; Ok(()) }, - "float32" => { parse_input::()?.write_to(output)?; Ok(()) }, - "float64" => { parse_input::()?.write_to(output)?; Ok(()) }, + "i8" | "int8" => parse_input::()?.write_to(output)?, + "u8" | "uint8" => parse_input::()?.write_to(output)?, + "i16" | "int16" => parse_input::()?.write_to(output)?, + "u16" | "uint16" => parse_input::()?.write_to(output)?, + "i32" | "int32" => parse_input::()?.write_to(output)?, + "u32" | "uint32" => parse_input::()?.write_to(output)?, + "i64" | "int64" => parse_input::()?.write_to(output)?, + "u64" | "uint64" => parse_input::()?.write_to(output)?, + "f32" | "float32" => parse_input::()?.write_to(output)?, + "f64" | "float64" => parse_input::()?.write_to(output)?, _ => { print_usage(); - Err(Box::new(CliErr("Invalid data type"))) + return Err(Box::new(CliErr("Invalid data type"))); } - } - }, + }; + Ok(()) + } _ => { print_usage(); Err(Box::new(CliErr("Invalid arguments"))) - }, + } } } @@ -58,11 +50,12 @@ Reads textual data from the standard input and writes it in a binary format to o use std::str::FromStr; -fn parse_input() -> Result, Box> where +fn parse_input() -> Result, Box> +where T: FromStr, - ::Err: Error + 'static + ::Err: Error + 'static, { - use std::io::{BufRead, stdin}; + use std::io::{stdin, BufRead}; let mut values = Vec::new(); -- 2.34.1