eolify 0.4.0

High-performance line ending normalization for Rust.
Documentation
# Changelog


All notable changes to this project will be documented in this file.

## [0.4.0] - 2025-12-20


### Notable (user-facing) changes


- Refactored the chunked normalization API: the previous `Normalize` trait
  was split into `NormalizeChunk` (core chunk-processing trait) and a
  convenience `Normalize` impl for whole-buffer APIs. This changes the
  trait names and how consumers integrate chunk-based normalization.

- The `normalize_chunk` API changed significantly:
  - Output buffers are now `MaybeUninit<u8>` for zero-initialization avoidance.
  - Implementations receive an optional `state` parameter (an associated
    `State` type) instead of a `preceded_by_cr: bool`, and return a
    `NormalizeChunkResult<State>` containing the next-state.
  - A new `max_output_size_for_chunk(chunk_size, state, is_last_chunk)` helper
    replaces the old sizing API.

- `NormalizeChunkResult` is now generic over a `State` and exposes the
  resulting state instead of a simple boolean `ended_with_cr` flag.

- Public exports in `lib.rs` and several format implementations were updated
  to use the new traits and signatures. If you implemented custom formats
  or used the low-level chunk API, you will need to adapt to these new
  types and function signatures.

### Other changes


- Performance improvements and additional benchmarks were added.

### Migration notes


See the Upgrade section in the README for guidance on porting code that
used the old chunk API to the new `NormalizeChunk` trait.