format-bytes 0.4.0

A macro to format bytestrings
Documentation
# Changelog

## format-bytes 0.4.0

### Breaking

- Rust 1.85 is required (since it's the lowest that supports edition 2024).
- Escaping of brackets with `{{` and `}}` now works properly.
- A lone `}` is now also an error.
- Format strings must now be valid UTF-8.

### Added

- String literals are supported as format strings.
- `{name}` placeholders, filled by `name = value` arguments or by the variable
  `name` in the caller's scope.
- `Sink`, which `write_bytes!` writes to, to keep the format string's text
  apart from its arguments. Every `std::io::Write` is a `Sink`.
- `DisplayBytes::visit` and `Visit`, for values to describe themselves with
  their type to structured sinks.
- `message!`, which keeps its format string and arguments in a `Message`, to be
  written later.

### Changed

- Arguments are evaluated once, before anything is written.
- `join()` collects its items when called, and can be formatted more than once.

### Fixed

- Arguments named `output` are no longer shadowed by the output stream.
- The macros work when `format-bytes` is renamed or re-exported.