All notable changes to this Rust implementation of hypercore-protocol will be documented here.
BIG CHANGES:
- Encryption and framing of streams has been moved out of this crate into
hypercore_handshakeanduint24le_framingrespectively. This had big impacts on the public API. NowProtocol::newjust takes aimpl CipherTraitargument. - Remove dependence on
hypercoreinstead we usehypercore_schema. - Bumped to edition 2024.
- Implement Clone on Channel, remove unnecessary mut requirements, and improve Protocol debugging.
Support hypercore v0.14.0 and change tokio as the default async runtime.
Support hypercore v0.13.0 which [removed generic parameters from Hypercore and Storage][datrs/hypercore#139].
- Implement close() and signal_local() in CommandTx
- Support for Hypercore LTS v10 which is backward incompatible with v9 and thus v0.3.0 of this crate. This resulted in many changes throughout the API.
- Changed the generic argument of the Protocol struct to be a single IO handle (AsyncRead + AsyncWrite) in place of a R: AsyncRead and W: AsyncWrite. This is a change in the public API. If you have seperate reader and writer structs, a Duplex handle is provided that combines the reader and writer. If you have a struct that is both AsyncRead and AsyncWrite, the Protocol is now generic just over that struct.
- Reworked internals to use manual poll functions and not an async function. The
Protocolstruct now directly implementsStream, theProtocolStreamwrapper is removed. - Made the
Eventenum non-exhaustive. - Removed the
destroymethod, errors are emitted on the protocol stream. - Changed key and discovery key values to be
[u8; 32]in place ofVec<u8>. To convert from a
Vec<u8>, usekey.try_into().unwrap()if you're sure that the key is a 32 byte longu8vector.
initial release