Crate-wide error and Result.
Structured error types that library consumers can match on. Every distinct failure mode has its own variant.