~daemoness/vinezombie

Add ClientCodec and ServerCodec

Adds a "tokio-codec" feature to implement the tokio_util
codec traits for these two types.

Copies the incremental parsing/writing functions on the
ircmsg types to these marker structs with the intent
of removing the ones on the types themselves.

Broadens some From impls for string pseudosubtypes.
This might affect inference, but shouldn't break anything in practice.
Add general *_flat_map methods to YieldParsed

Deprecates the old *_map methods.
In 0.4 they will be changed to not be optional.
Implement serde for ClientMsg+ServerMsg
Broaden Deserialize impls
Fix SPDX identifier
Always box handlers; use ControlFlow

Replaces SendCont with ControlFlow<Sent>,
and changes the return value of Handler::handle to a ControlFlow<()>.
This improves clarity, and ControlFlow has a (very limited) Try implementation.

MakeHandler now always boxes the handlers and no longer has an associated Handler type.
This improves flexibility and encapsulation, and we can afford the performance cost.
Adjust and fix lints
Update reg handler to use client state

The handler now, instead of returning Registration,
sets the Client's internal ClientState.
This means useful state info is more readily-available to handlers.

Updated examples to match.
Share client state with handlers

This adds a parameter to the handler methods that allows them
to observe and mutate arbitrary information about the client's state.
Currently no handlers actually use this.
Rework SASL authentication

Rewrites SaslLogic, which now outputs into a SecretBuf and
reports the name of the mechanism in use instead of Sasl.

The Sasl trait now returns a Vec of SaslLogics.

Adds a Password authenticator to auth using PLAIN
(or, in the future, SCRAM).

The SASL handler now processes a whole SaslQueue.

Removes Authenticate and implements MakeHandler on
names::cmd::AUTHENTICATE instead.

Simplifies the registration handler thanks to these changes.
Add TrimAscii for trimming Bytes in-place
Extend SecretBuf with new methods
Add crypto feature, update to rustls 0.23

rustls 0.22 adds support for alternate crypto providers;
0.23 defaults to aws_lc_rs. The tls feature now pulls in NO crypto providers,
but expects a process-default crypto provider to be set before doing TLS.
The crypto feature pulls in ring and adds it as a provider for rustls,
as we'll be using ring anyway for fancier SASL auths.

Due to the 78-column limit being cumbersome on Cargo.toml,
it has been restricted to only apply to markdown files.
Rework handling of secrets

Secrets can now be loaded during deserialization of a struct containing them
(e.g. Options). They are also typed more-strongly.

Adds SecretBuf, a mutable buffer for containing sensitive data
before constructing a Bytes from it.

Sasl::logic is now infallible, as secrets are supposed to have been loaded
earlier.

The password-retrieval function in Register is now infallible.
As such, Register's handler construction now uses the Infallible error type.
RFC 1216 will hopefully be stabilized at some point soon.

Adds CString conversions to NoNul and friends.

Removes zeroize as a feature and optional dependency.
We'll just write_volatile directly.
Name string methods more consistently

Use "from" for conversions from other types, both fallible and not.
Improve and correct CTCP handling

Now that it's correct, also uses the CTCP handler in the reconnect example.
Include ChannelSpec in Client

Oftentimes the channel spec isn't going to change frequently,
so it becomes fairly redundant as a parameter on Client::add.

This alters the Client creation functions to include the channel spec,
as well as adding a type parameter to Client for it.

Also removes new_client as it's basically pointless.
Reorganize queue code

Moves the adjuster out of Client and into Queue behind a dyn.
This removes at type parameter from Client; some methods were changed
accordingly.

Flattens queue::adjuster into the queue module and made it public.

Removes the Adjuster impl for () as it's now pointless.

Fixes up some documentation.
Next
Do not follow this link