commit 25b7cceabdfa9b0ce5af16b2fcc0aad41f1762e4
parent bcbc817d44f5ca0e0d8e59521b29ba521f857959
Author: lash <dev@holbrook.no>
Date:   Sun, 26 Jun 2022 19:32:19 +0000
Add main, return metadata from rdf read
Diffstat:
3 files changed, 130 insertions(+), 1 deletion(-)
diff --git a/Cargo.toml b/Cargo.toml
@@ -6,6 +6,10 @@ edition = "2021"
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
+[lib]
+name = "kitab"
+path = "src/lib.rs"
+
 [dependencies]
 xattr = "0.2.2"
 #inotify = "0.8.0"
@@ -21,6 +25,8 @@ log = "^0.4"
 env_logger = "^0.9"
 urn = "^0.4.0"
 #tempfile = "^3.3.0"
+clap = "^2.34.0"
+directories = "^4.0.1"
 
 [dev-dependencies]
 tempfile = "^3.3.0"
diff --git a/src/main.rs b/src/main.rs
@@ -0,0 +1,122 @@
+use std::default;
+use std::fs::File;
+use std::path::{
+    Path,
+    PathBuf,
+};
+use env_logger;
+use clap::{
+    App, 
+    Arg,
+    ArgMatches,
+    SubCommand,
+};
+use directories::{
+    BaseDirs,
+};
+use log::{
+    debug,
+    info,
+};
+
+#[cfg(feature = "rdf")]
+use kitab::rdf::read as rdf_read;
+
+
+fn args_setup() -> ArgMatches<'static> {
+    let mut o = App::new("kitab");
+    o = o.version("0.0.1");
+    o = o.author("Louis Holbrook <dev@holbrook.no>");
+    o = o.arg(
+        Arg::with_name("file")
+            .long("file")
+            .short("f")
+            .value_name("File to match records against")
+            .takes_value(true)
+            );
+    let mut o_import = (
+        SubCommand::with_name("import")
+        .about("import information from file")
+        .version("0.0.1")
+        );
+    o_import = o_import.arg(
+        Arg::with_name("PATH")
+        .help("Path to operate on")
+        .required(true)
+        .index(1)
+        );
+
+    o = o.subcommand(o_import);
+
+    o.get_matches()
+}
+
+// commands
+// kitab import <file> - attempt in order import rdf, import spec
+// kitab export <file> - export rdf/turtle
+// kitab scan <path> - recursively 
+
+fn resolve_directory(args: &ArgMatches) -> PathBuf {
+    match BaseDirs::new() {
+        Some(v) => {
+            let d = v.data_dir();
+            d.join("kitab")
+                .join("idx")
+        },
+        _ => {
+            PathBuf::from(".")
+                .join(".kitab")
+                .join("/idx")
+        },
+    }
+}
+
+fn str_to_path(args: &ArgMatches) -> PathBuf {
+    let mut p_canon: PathBuf;
+    match args.value_of("PATH") {
+        Some(v) => {
+            let p = &Path::new(v);
+            match p.canonicalize() {
+                Ok(v) => {
+                    p_canon = v.clone();
+                },
+                Err(e) => {
+                    panic!("path error: {}", e);
+                },
+            };
+        },
+        None => {
+            panic!("path required"); 
+        },
+    }
+    p_canon
+}
+
+fn exec_import(f: &Path, index_path: &Path) {
+    #[cfg(feature = "rdf")]
+    {
+        let f = File::open(f).unwrap();
+        let m = rdf_read(&f);
+        
+        let fp = index_path.join(m.fingerprint());
+        debug!("writing record for title {} to {:?}", m.title(), &fp);
+    }
+}
+
+fn main() {
+    env_logger::init();
+
+    let args = args_setup();
+
+    let index_dir = resolve_directory(&args);
+    info!("have index directory {:?}", &index_dir);
+    
+    match args.subcommand_matches("import") {
+        Some(v) => {
+            let p = str_to_path(v);
+            info!("have path {:?}", &p);
+            return exec_import(p.as_path(), index_dir.as_path());
+        },
+        _ => {},
+    }
+}
diff --git a/src/rdf.rs b/src/rdf.rs
@@ -170,7 +170,7 @@ fn handle_parse_match(metadata: &mut MetaData, triple: Triple) -> Result<(), Rdf
     Ok(())
 }
 
-pub fn read(r: impl Read) {
+pub fn read(r: impl Read) -> MetaData {
     let mut metadata = MetaData::empty();
     let bf = BufReader::new(r);
     let mut tp = TurtleParser::new(bf, None);
@@ -183,6 +183,7 @@ pub fn read(r: impl Read) {
         }
         Ok(())
     });
+    metadata
 }
 
 #[cfg(test)]