aboutsummaryrefslogtreecommitdiff
path: root/lockchain-files/src/fs/primitive.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lockchain-files/src/fs/primitive.rs')
-rw-r--r--lockchain-files/src/fs/primitive.rs47
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)
+}