summary refs log tree commit diff
path: root/ripple/fossil/src/lib.rs
diff options
context:
space:
mode:
authoredef <edef@unfathomable.blue>2022-05-03 21:09:59 +0000
committeredef <edef@unfathomable.blue>2022-05-03 21:21:50 +0000
commite7b80cca1c93efda1576e19846ebf089ff6cfa95 (patch)
tree691707333e1d090c77c7e719281fc25a76c7ec56 /ripple/fossil/src/lib.rs
parent31211f84c2a2467a3b4b1a400d16c7195485b9d6 (diff)
downloadunf-legacy-e7b80cca1c93efda1576e19846ebf089ff6cfa95.tar.zst
ripple/fossil: handle missing blobs more gracefully
Change-Id: I8a928b57ecc81bea31d757e73b9ece9474628db4
Diffstat (limited to 'ripple/fossil/src/lib.rs')
-rw-r--r--ripple/fossil/src/lib.rs20
1 files changed, 8 insertions, 12 deletions
diff --git a/ripple/fossil/src/lib.rs b/ripple/fossil/src/lib.rs
index 004cf45..007a771 100644
--- a/ripple/fossil/src/lib.rs
+++ b/ripple/fossil/src/lib.rs
@@ -207,18 +207,14 @@ impl Store {
 		Some(store::Chunk::decode(&*buf).unwrap())
 	}
 
-	pub fn read_blob(&self, ident: Digest) -> Vec<u8> {
+	pub fn read_blob(&self, ident: Digest) -> Option<Vec<u8>> {
 		let mut buffer = Vec::new();
-		self.open_blob(ident).read_to_end(&mut buffer).unwrap();
-		buffer
+		self.open_blob(ident)?.read_to_end(&mut buffer).unwrap();
+		Some(buffer)
 	}
 
-	pub fn open_blob(&self, ident: Digest) -> Blob {
-		let buf = self
-			.blobs
-			.get(&*ident.as_bytes())
-			.unwrap()
-			.expect("blob not found");
+	pub fn open_blob(&self, ident: Digest) -> Option<Blob> {
+		let buf = self.blobs.get(&*ident.as_bytes()).unwrap()?;
 
 		let store::Blob {
 			mut chunks,
@@ -241,7 +237,7 @@ impl Store {
 			})
 			.collect();
 
-		Blob(bao::decode::Decoder::new_outboard(
+		Some(Blob(bao::decode::Decoder::new_outboard(
 			RawBlob {
 				store: self,
 				chunks,
@@ -250,7 +246,7 @@ impl Store {
 			},
 			io::Cursor::new(bao_inline),
 			&ident,
-		))
+		)))
 	}
 }
 
@@ -537,5 +533,5 @@ fn read_write() {
 	// TODO(edef): use a temporary file
 	let store = Store::open("fossil.db").unwrap();
 	let ident = store.write_blob(&data);
-	assert_eq!(data, store.read_blob(ident));
+	assert_eq!(Some(data), store.read_blob(ident));
 }