refactor
[Mitarbeiter/Tim-Zeitz/stud-rust-base.git] / src / bin / decode_vector.rs
1 use stud_rust_base::{io::*, cli::CliErr};
2 use std::{env, error::Error};
3
4 fn main() -> Result<(), Box<dyn Error>> {
5     match &env::args().skip(1).collect::<Vec<String>>()[..] {
6         [data_type, input] => {
7             match data_type.as_ref() {
8                 "i8" => { print_values(Vec::<i8>::load_from(input)?); Ok(()) },
9                 "u8" => { print_values(Vec::<u8>::load_from(input)?); Ok(()) },
10                 "i16" => { print_values(Vec::<i16>::load_from(input)?); Ok(()) },
11                 "u16" => { print_values(Vec::<u16>::load_from(input)?); Ok(()) },
12                 "i32" => { print_values(Vec::<i32>::load_from(input)?); Ok(()) },
13                 "u32" => { print_values(Vec::<u32>::load_from(input)?); Ok(()) },
14                 "i64" => { print_values(Vec::<i64>::load_from(input)?); Ok(()) },
15                 "u64" => { print_values(Vec::<u64>::load_from(input)?); Ok(()) },
16                 "f32" => { print_values(Vec::<f32>::load_from(input)?); Ok(()) },
17                 "f64" => { print_values(Vec::<f64>::load_from(input)?); Ok(()) },
18                 "int8" => { print_values(Vec::<i8>::load_from(input)?); Ok(()) },
19                 "uint8" => { print_values(Vec::<u8>::load_from(input)?); Ok(()) },
20                 "int16" => { print_values(Vec::<i16>::load_from(input)?); Ok(()) },
21                 "uint16" => { print_values(Vec::<u16>::load_from(input)?); Ok(()) },
22                 "int32" => { print_values(Vec::<i32>::load_from(input)?); Ok(()) },
23                 "uint32" => { print_values(Vec::<u32>::load_from(input)?); Ok(()) },
24                 "int64" => { print_values(Vec::<i64>::load_from(input)?); Ok(()) },
25                 "uint64" => { print_values(Vec::<u64>::load_from(input)?); Ok(()) },
26                 "float32" => { print_values(Vec::<f32>::load_from(input)?); Ok(()) },
27                 "float64" => { print_values(Vec::<f64>::load_from(input)?); Ok(()) },
28                 _ => {
29                     print_usage();
30                     Err(Box::new(CliErr("Invalid data type")))
31                 }
32             }
33         },
34         _ => {
35             print_usage();
36             Err(Box::new(CliErr("Invalid arguments")))
37         },
38     }
39 }
40
41 fn print_usage() {
42     eprintln!("Usage: decode_vector data_type input_vector_file
43
44 Reads binary data from input_vector_file and writes the data to the standard output. data_type can be one of
45 * i8
46 * u8
47 * i16
48 * u16
49 * i32
50 * u32
51 * i64
52 * u64
53 * f32
54 * f64
55
56 ");
57 }
58
59 use std::fmt::Display;
60
61 fn print_values<T>(values: Vec<T>) where
62     T: Display
63 {
64     for v in values {
65         println!("{}", v);
66     }
67 }