1 extern crate stud_rust_base;
2 use stud_rust_base::{io::*, cli::CliErr};
3 use std::{env, error::Error};
5 fn main() -> Result<(), Box<dyn Error>> {
6 let mut args = env::args();
9 match &args.collect::<Vec<String>>()[..] {
10 [data_type, output] => {
11 match data_type.as_ref() {
12 "i8" => { parse_input::<i8>()?.write_to(output)?; Ok(()) },
13 "u8" => { parse_input::<u8>()?.write_to(output)?; Ok(()) },
14 "i16" => { parse_input::<i16>()?.write_to(output)?; Ok(()) },
15 "u16" => { parse_input::<u16>()?.write_to(output)?; Ok(()) },
16 "i32" => { parse_input::<i32>()?.write_to(output)?; Ok(()) },
17 "u32" => { parse_input::<u32>()?.write_to(output)?; Ok(()) },
18 "i64" => { parse_input::<i64>()?.write_to(output)?; Ok(()) },
19 "u64" => { parse_input::<u64>()?.write_to(output)?; Ok(()) },
20 "f32" => { parse_input::<f32>()?.write_to(output)?; Ok(()) },
21 "f64" => { parse_input::<f64>()?.write_to(output)?; Ok(()) },
22 "int8" => { parse_input::<i8>()?.write_to(output)?; Ok(()) },
23 "uint8" => { parse_input::<u8>()?.write_to(output)?; Ok(()) },
24 "int16" => { parse_input::<i16>()?.write_to(output)?; Ok(()) },
25 "uint16" => { parse_input::<u16>()?.write_to(output)?; Ok(()) },
26 "int32" => { parse_input::<i32>()?.write_to(output)?; Ok(()) },
27 "uint32" => { parse_input::<u32>()?.write_to(output)?; Ok(()) },
28 "int64" => { parse_input::<i64>()?.write_to(output)?; Ok(()) },
29 "uint64" => { parse_input::<u64>()?.write_to(output)?; Ok(()) },
30 "float32" => { parse_input::<f32>()?.write_to(output)?; Ok(()) },
31 "float64" => { parse_input::<f64>()?.write_to(output)?; Ok(()) },
34 Err(Box::new(CliErr("Invalid data type")))
40 Err(Box::new(CliErr("Invalid arguments")))
46 eprintln!("Usage: encode_vector data_type output_vector_file
48 Reads textual data from the standard input and writes it in a binary format to output_vector_file. The input data should be one data element per line. The data is only written once an end of file is encountered on the input. data_type can be one of
63 use std::str::FromStr;
65 fn parse_input<T>() -> Result<Vec<T>, Box<dyn Error>> where
67 <T as FromStr>::Err: Error + 'static
69 use std::io::{BufRead, stdin};
71 let mut values = Vec::new();
74 for line in stdin.lock().lines() {
75 values.push(line.unwrap().parse::<T>()?)