summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2019-08-12 21:54:45 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2019-08-12 21:54:45 +0200
commit0bcf9757e332be1000fa9df22920ebdd59f1de31 (patch)
tree939d38579e856558a2f3090405045dd37385d8e2
downloadcdart-master.tar.gz
cdart-master.tar.bz2
cdart-master.zip
Initial commitHEADmaster
-rw-r--r--.gitignore2
-rw-r--r--.idea/.gitignore2
-rw-r--r--.idea/misc.xml6
-rw-r--r--.idea/modules.xml8
-rw-r--r--.idea/vcs.xml6
-rw-r--r--Cargo.lock6
-rw-r--r--Cargo.toml9
-rw-r--r--cdart.iml15
-rw-r--r--src/config.rs48
-rw-r--r--src/main.rs25
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)
+ }
+}