hyperium / http

Rust HTTP types
Apache License 2.0
1.16k stars 291 forks source link

Implement non-failing builders for Request, Response and Uri. #483

Open kaj opened 3 years ago

kaj commented 3 years ago

Fixes #330. Replaces #442 , #448 , and #454 .

Creating a Request, Response, or Uri with the builder pattern should not require handling errors unless opting in by using a try_-method (which returns a Result<Builder>, not a Builder with an internal error state).

This is really a breaking change to the Builders, but rather than suggesting a breaking change directly, I introduce alternatives named Builder2. If this is accepted, the original Builder is deprecated, and in a later release Builder2 can be renamed back to Builder.

The new uri::Builder2 is generic on its contents, which starts out as the empty type (). The parts Scheme, Authority and PathAndQuery can be added in any combination, and the build method is implemented for valid combinations only. Looking at the generated documentation for uri::Builder2, it gets a bit repetitive, as the property and a try_property method for each of the three properties is repeated for each of the eight variants of the Builder2, and a build method for four of them.