mrhooray / crc-rs

Rust implementation of CRC(16, 32, 64) with support of various standards

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Allow for multiple calls to finalize (or equivalent)

jpittis opened this issue · comments

Imagine a use-case where someone would like to maintain a rolling CRC digest, while also regularly reading the sum of that CRC digest via the equivalent of calling finalize. This is a common pattern used by write ahead logs where you want to maintain a rolling CRC of all the data written to the log, while also embedding the rolling finalized value in each of the records written to disk.

As far as I can tell, the current APIs are not compatible with this use-case:

  • The higher-level Digest struct's finalize method unnecessarily consumes itself via it's self receiver, disallowing the interleaving of multiple calls to update and finalize.
  • The lower level Crc structs don't make update or finalize public, disallowing consumes to write their own version of Digest that allows the interleaving of multiple calls to update and finalize.

A workaround might be to clone the Digest before calling finalize which seems inefficient.

Any thoughts on this use-case and the best way to unlock it?