diff options
Diffstat (limited to 'lockchain-files/src/fs/primitive.rs')
-rw-r--r-- | lockchain-files/src/fs/primitive.rs | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/lockchain-files/src/fs/primitive.rs b/lockchain-files/src/fs/primitive.rs index 3723232..c5e13a3 100644 --- a/lockchain-files/src/fs/primitive.rs +++ b/lockchain-files/src/fs/primitive.rs @@ -2,6 +2,10 @@ #![allow(dead_code)] +use std::fs::OpenOptions; +use std::io::{Read, Result, Write}; +use std::path::PathBuf; + /// A set of files that exist inside a `FileVault` pub enum FileType { /// A data record file @@ -20,15 +24,46 @@ pub enum FileType { macro_rules! file_ending { ($type:expr) => { match $type { - FileType::Record => "record", - FileType::Metadata => "meta", - FileType::Checksum => "sum", - FileType::Config => "cfg" + &FileType::Record => "record", + &FileType::Metadata => "meta", + &FileType::Checksum => "sum", + &FileType::Config => "cfg", _ => "dat", } }; } -pub fn write_file(tt: FileType) {} +#[inline] +fn type_path(tt: FileType, root: &PathBuf) -> PathBuf { + use self::FileType::*; + let mut path = root.clone(); + match tt { + Record => path.push("records"), + Metadata => path.push("metadata"), + Checksum => path.push("checksums"), + _ => path.push("."), + }; + + path +} + +pub fn write_file(tt: FileType, root: PathBuf, name: &str, contents: Vec<u8>) -> Result<()> { + let file_name = format!("{}.{}", name, file_ending!(&tt)); + let mut path = type_path(tt, &root); + path.push(file_name); -pub fn read_file() {} + let mut file = OpenOptions::new().write(true).create(true).open(path)?; + file.write_all(&contents)?; + + Ok(()) +} + +pub(crate) fn read_file(tt: FileType, root: PathBuf, name: &str) -> Result<Vec<u8>> { + let file_name = format!("{}.{}", name, file_ending!(&tt)); + let mut path = type_path(tt, &root); + path.push(file_name); + + let mut file = OpenOptions::new().read(true).create(false).open(path)?; + let mut buffer = Vec::<u8>::new(); + file.read_to_end(&mut buffer).map(|_| buffer) +} |