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.
Fixes #330. Replaces #442 , #448 , and #454 .
Creating a
Request
,Response
, orUri
with the builder pattern should not require handling errors unless opting in by using atry_
-method (which returns aResult<Builder>
, not aBuilder
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 partsScheme
,Authority
andPathAndQuery
can be added in any combination, and the build method is implemented for valid combinations only. Looking at the generated documentation foruri::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 theBuilder2
, and a build method for four of them.