/// let mut new_store =
/// Store::create(&MAGIC_BYTES, &new_file_path).expect("must create new file");
/// if let Some(aggregated_changeset) = changeset {
- /// new_store.append(&aggregated_changeset)?;
+ /// new_store.append(aggregated_changeset.as_ref())?;
/// }
/// // The following will overwrite the original file. You will loose the corrupted
/// // portion of the original file forever.
f.read_exact(&mut magic_buf)?;
if magic_buf != magic {
return Err(StoreErrorWithDump {
- changeset: Option::<C>::None,
+ changeset: Option::<Box<C>>::None,
error: StoreError::InvalidMagicBytes {
got: magic_buf,
expected: magic.to_vec(),
Ok(aggregated_changeset)
}
Err(iter_error) => Err(StoreErrorWithDump {
- changeset: aggregated_changeset,
+ changeset: aggregated_changeset.map(Box::new),
error: iter_error,
}),
},
Self::create(magic, file_path)
.map(|store| (store, Option::<C>::None))
.map_err(|err: StoreError| StoreErrorWithDump {
- changeset: Option::<C>::None,
+ changeset: Option::<Box<C>>::None,
error: err,
})
}
#[derive(Debug)]
pub struct StoreErrorWithDump<C> {
/// The partially-aggregated changeset.
- pub changeset: Option<C>,
+ pub changeset: Option<Box<C>>,
/// The [`StoreError`]
pub error: StoreError,
impl<C> From<io::Error> for StoreErrorWithDump<C> {
fn from(value: io::Error) -> Self {
Self {
- changeset: Option::<C>::None,
+ changeset: Option::<Box<C>>::None,
error: StoreError::Io(value),
}
}
changeset,
error: StoreError::Bincode(_),
}) => {
- assert_eq!(changeset, Some(test_changesets))
+ assert_eq!(changeset, Some(Box::new(test_changesets)))
}
unexpected_res => panic!("unexpected result: {unexpected_res:?}"),
}
changeset,
error: StoreError::Bincode(_),
}) => {
- assert_eq!(changeset, Some(test_changesets))
+ assert_eq!(changeset, Some(Box::new(test_changesets)))
}
unexpected_res => panic!("unexpected result: {unexpected_res:?}"),
}
.expect_err("should fail to aggregate");
assert_eq!(
err.changeset,
- changesets.iter().cloned().reduce(|mut acc, cs| {
- Merge::merge(&mut acc, cs);
- acc
- }),
+ changesets
+ .iter()
+ .cloned()
+ .reduce(|mut acc, cs| {
+ Merge::merge(&mut acc, cs);
+ acc
+ })
+ .map(Box::new),
"should recover all changesets that are written in full",
);
// Remove file and start again