diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2019-08-12 21:54:45 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2019-08-12 21:54:45 +0200 |
| commit | 0bcf9757e332be1000fa9df22920ebdd59f1de31 (patch) | |
| tree | 939d38579e856558a2f3090405045dd37385d8e2 | |
| download | cdart-master.tar.gz cdart-master.tar.bz2 cdart-master.zip | |
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | .idea/.gitignore | 2 | ||||
| -rw-r--r-- | .idea/misc.xml | 6 | ||||
| -rw-r--r-- | .idea/modules.xml | 8 | ||||
| -rw-r--r-- | .idea/vcs.xml | 6 | ||||
| -rw-r--r-- | Cargo.lock | 6 | ||||
| -rw-r--r-- | Cargo.toml | 9 | ||||
| -rw-r--r-- | cdart.iml | 15 | ||||
| -rw-r--r-- | src/config.rs | 48 | ||||
| -rw-r--r-- | src/main.rs | 25 |
10 files changed, 127 insertions, 0 deletions
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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectRootManager"> + <output url="file://$PROJECT_DIR$/out" /> + </component> +</project>
\ 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/cdart.iml" filepath="$PROJECT_DIR$/cdart.iml" /> + </modules> + </component> +</project>
\ 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + </component> +</project>
\ 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 <d.brentjes@gmail.com>"] +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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="RUST_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/../cdart\examples" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/../cdart\tests" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/../cdart\benches" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/../cdart\target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module>
\ 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<Entry> +} + +impl Entry {} + +impl Config {} + +pub(crate) fn create_config(reader: impl BufRead) -> Result<Config, String> { + let lines= reader.lines(); + let(successful_lines, failed_lines) : (Vec<Result<String,Error>>, Vec<Result<String, Error>>) = 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<Result<Entry, String>>, Vec<Result<Entry, String>>) = successful_lines.into_iter().map(|line| { + match line.split_whitespace().collect::<Vec<&str>>().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<String> = 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) + } +} |
