diff options
-rw-r--r-- | lockchain-files/src/create.rs | 2 | ||||
-rw-r--r-- | lockchain-files/src/fs/mod.rs (renamed from lockchain-files/src/fs.rs) | 38 | ||||
-rw-r--r-- | lockchain-files/src/fs/primitive.rs | 34 | ||||
-rw-r--r-- | lockchain-files/src/lib.rs | 125 | ||||
-rw-r--r-- | lockchain-files/src/load.rs | 2 |
5 files changed, 117 insertions, 84 deletions
diff --git a/lockchain-files/src/create.rs b/lockchain-files/src/create.rs index 7d6875c..e35c449 100644 --- a/lockchain-files/src/create.rs +++ b/lockchain-files/src/create.rs @@ -11,7 +11,7 @@ use lcc::{ use std::collections::HashMap; use config::{ConfigError, VaultConfig}; -use fs::{FileType, Filesystem}; +use fs::Filesystem; use FileVault; impl<T: Body> FileVault<T> { diff --git a/lockchain-files/src/fs.rs b/lockchain-files/src/fs/mod.rs index af47e50..6a6d898 100644 --- a/lockchain-files/src/fs.rs +++ b/lockchain-files/src/fs/mod.rs @@ -9,7 +9,7 @@ //! which will return either `Ok(())` or the first error in the list //! of operations. -use lcc::traits::AutoEncoder; +use lcc::traits::{Body, AutoEncoder}; use std::collections::HashMap; use std::error::Error; @@ -20,6 +20,10 @@ use std::{ }; use utils::FileToString; +use FileVault; + +mod primitive; +use self::primitive::*; #[derive(Debug)] pub struct Filesystem { @@ -28,31 +32,6 @@ pub struct Filesystem { pub root: PathBuf, } -/// A switching enum to determine what type of file to load -#[allow(dead_code)] -pub enum FileType { - /// A data record file - Record, - /// A MetaDomain file - Metadata, - /// A simple checksum file - Checksum, - #[doc(hidden)] - __NonExhaustive, -} - -/// Construct a file ending for a specific match result -macro_rules! file_ending { - ($type:expr) => { - match $type { - FileType::Record => "record", - FileType::Metadata => "meta", - FileType::Checksum => "sum", - _ => "dat", - } - }; -} - impl Filesystem { /// Create a new filesystem representation /// @@ -105,6 +84,13 @@ impl Filesystem { )?) } + pub fn sync_vault<T: Body>(&self, vault: &FileVault<T>) -> Result<(), io::Error> { + vault.config.save(&self.root)?; + + + unimplemented!() + } + /// Respond to a sync request pub fn sync<T>(&self, data: &HashMap<String, T>, types: FileType) -> Result<(), Box<Error>> where diff --git a/lockchain-files/src/fs/primitive.rs b/lockchain-files/src/fs/primitive.rs new file mode 100644 index 0000000..3723232 --- /dev/null +++ b/lockchain-files/src/fs/primitive.rs @@ -0,0 +1,34 @@ +//! Very simple file system primitives + +#![allow(dead_code)] + +/// A set of files that exist inside a `FileVault` +pub enum FileType { + /// A data record file + Record, + /// A MetaDomain file + Metadata, + /// A simple checksum file + Checksum, + /// _The_ config file + Config, + #[doc(hidden)] + __NonExhaustive, +} + +/// Construct a file ending for a specific match result +macro_rules! file_ending { + ($type:expr) => { + match $type { + FileType::Record => "record", + FileType::Metadata => "meta", + FileType::Checksum => "sum", + FileType::Config => "cfg" + _ => "dat", + } + }; +} + +pub fn write_file(tt: FileType) {} + +pub fn read_file() {} diff --git a/lockchain-files/src/lib.rs b/lockchain-files/src/lib.rs index 318aef6..611d260 100644 --- a/lockchain-files/src/lib.rs +++ b/lockchain-files/src/lib.rs @@ -6,8 +6,6 @@ //! //! All further documentation can be found in `FileVault` -#![feature(non_modrs_mods)] - extern crate lockchain_core as lcc; extern crate semver; extern crate toml; @@ -29,11 +27,11 @@ mod config; mod create; mod fs; mod load; -mod utils; mod userstore; +mod utils; pub use config::{ConfigError, VaultConfig}; -use fs::{FileType, Filesystem}; +use fs::Filesystem; /// Persistence mapper to a folder and file structure /// @@ -127,100 +125,115 @@ impl<T: Body> Vault<T> for FileVault<T> { /// Caches all files from disk to memory fn fetch(&mut self) { - self.records.clear(); - self.metadata.clear(); - - self.fs - .fetch::<Record<T>>(FileType::Record) - .unwrap() - .into_iter() - .map(|rec| (rec.header.name.clone(), rec)) - .for_each(|x| { - self.records.insert(x.0, x.1); - }); - - self.fs - .fetch::<MetaDomain>(FileType::Metadata) - .unwrap() - .into_iter() - .map(|rec| (rec.name().into(), rec)) - .for_each(|x| { - self.metadata.insert(x.0, x.1); - }); + // self.records.clear(); + // self.metadata.clear(); + + // self.fs + // .fetch::<Record<T>>(FileType::Record) + // .unwrap() + // .into_iter() + // .map(|rec| (rec.header.name.clone(), rec)) + // .for_each(|x| { + // self.records.insert(x.0, x.1); + // }); + + // self.fs + // .fetch::<MetaDomain>(FileType::Metadata) + // .unwrap() + // .into_iter() + // .map(|rec| (rec.name().into(), rec)) + // .for_each(|x| { + // self.metadata.insert(x.0, x.1); + // }); + unimplemented!() } /// Make sure a single record is loaded fn pull(&mut self, name: &str) { - self.records.remove(name); - self.records.insert( - name.to_owned(), - self.fs.pull::<Record<T>>(FileType::Record, name).unwrap(), - ); + // self.records.remove(name); + // self.records.insert( + // name.to_owned(), + // self.fs.pull::<Record<T>>(FileType::Record, name).unwrap(), + // ); + unimplemented!() } fn sync(&mut self) { - self.fs - .sync::<Record<T>>(&self.records, FileType::Record) - .unwrap(); - self.fs - .sync::<MetaDomain>(&self.metadata, FileType::Metadata) - .unwrap(); + // self.fs + // .sync::<Record<T>>(&self.records, FileType::Record) + // .unwrap(); + // self.fs + // .sync::<MetaDomain>(&self.metadata, FileType::Metadata) + // .unwrap(); + unimplemented!() } fn get_record(&self, name: &str) -> Option<&Record<T>> { - self.records.get(name) + // self.records.get(name) + unimplemented!() } fn contains(&self, name: &str) -> bool { - self.records.contains_key(name) + // self.records.contains_key(name) + unimplemented!() } fn add_record(&mut self, key: &str, category: &str, tags: Vec<&str>) { - self.records - .insert(key.to_owned(), Record::new(key, category, tags)); + // self.records + // .insert(key.to_owned(), Record::new(key, category, tags)); + unimplemented!() } fn delete_record(&mut self, record: &str) -> Option<Record<T>> { - self.records.remove(record) + // self.records.remove(record) + unimplemented!() } fn add_data(&mut self, record: &str, key: &str, data: Payload) -> Option<()> { - self.records.get_mut(record)?.add_data(key, data) + // self.records.get_mut(record)?.add_data(key, data) + unimplemented!() } fn get_data(&self, record: &str, key: &str) -> Option<&Payload> { - self.records.get(record)?.get_data(key) + // self.records.get(record)?.get_data(key) + unimplemented!() } fn meta_add_domain(&mut self, domain: &str) -> Option<()> { - if self.metadata.contains_key(domain) { - None - } else { - self.metadata.insert(domain.into(), MetaDomain::new(domain)); - Some(()) - } + // if self.metadata.contains_key(domain) { + // None + // } else { + // self.metadata.insert(domain.into(), MetaDomain::new(domain)); + // Some(()) + // } + unimplemented!() } fn meta_pull_domain(&self, domain: &str) -> Option<&MetaDomain> { - self.metadata.get(domain) + // self.metadata.get(domain) + unimplemented!() } fn meta_push_domain(&mut self, domain: MetaDomain) -> Option<()> { - self.metadata - .insert(domain.name().into(), domain) - .map_or((), |_| ()) // We don't care about `None` - .into() + // self.metadata + // .insert(domain.name().into(), domain) + // .map_or((), |_| ()) // We don't care about `None` + // .into() + unimplemented!() } fn meta_set(&mut self, domain: &str, name: &str, data: Payload) -> Option<()> { - self.metadata.get_mut(domain)?.set_field(name, data) + // self.metadata.get_mut(domain)?.set_field(name, data) + unimplemented!() } fn meta_get(&mut self, domain: &str, name: &str) -> Option<Payload> { - Some(self.metadata.get(domain)?.get_field(name)?.clone()) + // Some(self.metadata.get(domain)?.get_field(name)?.clone()) + unimplemented!() } fn meta_exists(&self, domain: &str) -> bool { - self.metadata.contains_key(domain) + // self.metadata.contains_key(domain) + unimplemented!() } } diff --git a/lockchain-files/src/load.rs b/lockchain-files/src/load.rs index fd4e66e..31da63c 100644 --- a/lockchain-files/src/load.rs +++ b/lockchain-files/src/load.rs @@ -7,7 +7,7 @@ use std::collections::HashMap; use ::FileVault; use ::config::{VaultConfig, ConfigError}; -use ::fs::{Filesystem, FileType}; +use ::fs::Filesystem; impl<T: Body> FileVault<T> { |