LukeMathWalker / wiremock-rs

HTTP mocking to test Rust applications.
Apache License 2.0
607 stars 69 forks source link

Support body streams #133

Open dodomorandi opened 8 months ago

dodomorandi commented 8 months ago

Description of changes: Add support to streaming body, hopefully without any breaking change (according to cargo-semver-checks, there aren't).

The rationale is that it is useful to simulate delays or errors while receiving the body during tests.

I tried to unify the stream APIs with the current ones, but unfortunately I have been not been use a trait compatible with both current TryInto<Vec<u8>/String> and Streams, mainly because of conflicts with blanket impls (once you impl<T> X for T where T: TryInto<Vec<u8>> you cannot implement anything else for X AFAIK).

I also realized that we have less controls on errors from body stream than I expected (see tests/mocks.rs:181-182), but the feature should be useful anyway.

The added API includes the possibility of specifying the length of the body, because it influences whether the Transfer-Encoding header is chunked or not.

Interesting enough, I realized (thanks to cargo-semver-checks) that I needed to add the + RefUnwindSafe + UnwindSafe bounds to the BodyFn type alias to avoid a breaking change on ResponseTemplate.


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.