commit bcbc817d44f5ca0e0d8e59521b29ba521f857959
parent 7837a38bdba270b7adbd2bc171f22864f6c619c5
Author: lash <dev@holbrook.no>
Date: Sun, 26 Jun 2022 16:13:22 +0000
Add file store generator
Diffstat:
4 files changed, 56 insertions(+), 10 deletions(-)
diff --git a/src/lib.rs b/src/lib.rs
@@ -4,6 +4,8 @@ pub mod meta;
pub mod dc;
+pub mod store;
+
#[cfg(feature = "rdf")]
pub mod rdf;
diff --git a/src/meta.rs b/src/meta.rs
@@ -386,16 +386,6 @@ impl MetaData {
}
}
-//impl FromStr for MetaData {
-// type Err = std::io::Error;
-//
-// fn from_str(s: &str) -> Result<MetaData, <MetaData as FromStr>::Err> {
-// BufRead
-// MetaData::empty();
-// Ok(())
-// }
-//}
-
#[cfg(test)]
mod tests {
use super::MetaData;
diff --git a/src/store.rs b/src/store.rs
@@ -0,0 +1,48 @@
+use std::io::Write;
+use std::path::{
+ PathBuf,
+ Path,
+};
+use std::fs::File;
+
+use crate::meta::MetaData;
+
+pub struct FileStore{
+ path: PathBuf,
+}
+
+impl FileStore {
+ pub fn new(p: &Path) -> Self {
+ FileStore{
+ path: p.to_path_buf(),
+ }
+ }
+
+ pub fn writer(&self, entry: &MetaData) -> impl Write {
+ let p = self.path.join(entry.fingerprint());
+ File::create(&p).unwrap()
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use biblatex::EntryType;
+ use tempfile::tempdir;
+ use super::{
+ FileStore,
+ MetaData,
+ };
+ use std::io::Write;
+
+ #[test]
+ fn test_writer() {
+ let mut digest = Vec::with_capacity(64);
+ digest.resize(64, 0x2a);
+ let m = MetaData::new("foo", "bar", EntryType::Article, Vec::from(digest), None);
+ let dir = tempdir().unwrap();
+ let fp = dir.path();
+ let fs = FileStore::new(&fp);
+ let mut w = fs.writer(&m);
+ w.write(m.title().as_bytes());
+ }
+}
diff --git a/testdata/meta.txt b/testdata/meta.txt
@@ -0,0 +1,6 @@
+Title: foo
+Author: bar
+Subject: baz
+Mime: text/plain
+Typ: report
+Language: nb-NO