From 0bcf9757e332be1000fa9df22920ebdd59f1de31 Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Mon, 12 Aug 2019 21:54:45 +0200 Subject: Initial commit --- .gitignore | 2 ++ .idea/.gitignore | 2 ++ .idea/misc.xml | 6 ++++++ .idea/modules.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ Cargo.lock | 6 ++++++ Cargo.toml | 9 +++++++++ cdart.iml | 15 +++++++++++++++ src/config.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 25 +++++++++++++++++++++++++ 10 files changed, 127 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 cdart.iml create mode 100644 src/config.rs create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53eaa21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +**/*.rs.bk diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..639900d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e88eda5 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..359ee42 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,6 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "cdart" +version = "0.1.0" + diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..1def3e9 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "cdart" +version = "0.1.0" +authors = ["Dennis Brentjes "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/cdart.iml b/cdart.iml new file mode 100644 index 0000000..62d12c3 --- /dev/null +++ b/cdart.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..d690ed2 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,48 @@ +use std::io::{BufRead, Error}; +use std::path::PathBuf; + +#[derive(Debug)] +pub(crate) struct Entry { + filename: PathBuf +} + +#[derive(Debug)] +pub(crate) struct Config { + entries: Vec +} + +impl Entry {} + +impl Config {} + +pub(crate) fn create_config(reader: impl BufRead) -> Result { + let lines= reader.lines(); + let(successful_lines, failed_lines) : (Vec>, Vec>) = lines.partition(Result::is_ok); + + let successful_lines : Vec<_> = successful_lines.into_iter().map(Result::unwrap).collect(); + let failed_lines : Vec<_> = failed_lines.into_iter().map(Result::unwrap_err).collect(); + + if !failed_lines.is_empty() { + return Result::Err(format!("Something went wrong when parsing file lines")); + } + + let (entries, failures) : (Vec>, Vec>) = successful_lines.into_iter().map(|line| { + match line.split_whitespace().collect::>().as_slice() { + [s] => { + return Result::Ok(Entry {filename: PathBuf::from(s)}); + } + _ => { + return Result::Err(format!("Line contains invalid Entry: {}", line)); + } + } + }).partition(Result::is_ok); + + let entries : Vec<_> = entries.into_iter().map(Result::unwrap).collect(); + let failures : Vec<_> = failures.into_iter().map(Result::unwrap_err).collect(); + + if !failures.is_empty() { + return Result::Err(failures.first().unwrap().to_string()) + } + + return Result::Ok(Config {entries}); +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..d4de3cc --- /dev/null +++ b/src/main.rs @@ -0,0 +1,25 @@ +#![feature(fmt_internals)] + +use std::{env, io}; +use std::fs::File; +use std::io::{BufReader, Write}; + +mod config; + +fn main() { + let args: Vec = env::args().collect(); + if args.len() != 2 { + ::std::process::exit(-1); + } + let file = File::open(&args[1]); + if file.is_err() { + ::std::process::exit(-2); + } + let reader = BufReader::new(file.unwrap()); + let config = config::create_config(reader); + + match io::stdout().write(format!("{:?}\n", config).as_bytes()){ + Ok(_) => {} + Err(_) => std::process::exit(-3) + } +} -- cgit v1.2.3-70-g09d2