summaryrefslogtreecommitdiff
path: root/src/store.rs
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-05-24 08:55:14 +0300
committerLars Wirzenius <liw@liw.fi>2021-05-29 11:41:15 +0300
commit6de230c382a4329df00bc11cc1ffb90390b13159 (patch)
treed4f0668be0d5cd07ea32af2b0978696658532122 /src/store.rs
parent566dd94d2e46c489b50d84a1fd24683460e5cfdc (diff)
downloadobnam2-6de230c382a4329df00bc11cc1ffb90390b13159.tar.gz
refactor: make metadata be part of datachunk
This makes it harder to lose the metadata for a chunk, or to use unrelated metadata and chunk. Also, soon I will refactor things for encrypting chunks, which will need metadata embedded in the encrypted chunk. Sponsored-by: author
Diffstat (limited to 'src/store.rs')
-rw-r--r--src/store.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/store.rs b/src/store.rs
index fca2c13..bccecc7 100644
--- a/src/store.rs
+++ b/src/store.rs
@@ -1,6 +1,5 @@
use crate::chunk::DataChunk;
use crate::chunkid::ChunkId;
-use crate::chunkmeta::ChunkMeta;
use std::path::{Path, PathBuf};
/// Store chunks, with metadata, persistently.
@@ -43,23 +42,26 @@ impl Store {
}
/// Save a chunk into a store.
- pub fn save(&self, id: &ChunkId, meta: &ChunkMeta, chunk: &DataChunk) -> StoreResult<()> {
+ pub fn save(&self, id: &ChunkId, chunk: &DataChunk) -> StoreResult<()> {
let (dir, metaname, dataname) = &self.filenames(id);
if !dir.exists() {
std::fs::create_dir_all(dir)?;
}
- std::fs::write(&metaname, meta.to_json())?;
+ std::fs::write(&metaname, chunk.meta().to_json())?;
std::fs::write(&dataname, chunk.data())?;
Ok(())
}
/// Load a chunk from a store.
pub fn load(&self, id: &ChunkId) -> StoreResult<DataChunk> {
- let (_, _, dataname) = &self.filenames(id);
+ let (_, metaname, dataname) = &self.filenames(id);
+ let meta = std::fs::read(&metaname)?;
+ let meta = serde_json::from_slice(&meta)?;
+
let data = std::fs::read(&dataname)?;
- let data = DataChunk::new(data);
+ let data = DataChunk::new(data, meta);
Ok(data)
}