Parse, don't Validate and Type-Driven Design in Rust
Summary
The article advocates parse-don't-validate and type-driven design in Rust, arguing that encoding invariants in type level reduces runtime errors and clarifies APIs. It uses examples like NonZeroF32 and NonEmptyVec, discusses trade-offs between Option/Result vs stronger parameter guarantees, and emphasizes early validation and safer deserialization with serde_json.