Refactor digest computations (Arecibo backport) #229
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Rationale
The multi-accumulator of SuperNova (introduced in #204, incubated in Arecibo) requires introducing digests in a more systematic approach.
What's in this PR?
This PR introduces a systematic way of creating a Digest for a particular data structure. The pattern is documented in the tests of
src/digest.rs
. Here are the highlights:How do I implement a Digest-equipped data structure ?
Here's the checklist:
SimpleDigestible
marker trait, which will stream thebincode
serialization of the object,digest
field to the target object wrapped in aOnceCell
, use the provided serde attribute (#[serde(skip, default = "OnceCell::new")]
) to ensure it's ignored during (de)serialization,DigestComputer
generic structure andOnceCell
'sget_or_try_init
,This backports the following PRs: