Feature: Implement the Body trait for more native data types to improve ergonomics
Currently, the 'String' is the only native data type that implements hyper::body::Body.
If we're passing other data types as a body, we need to add the http_body_util crate and add a little bit of boiler plate when building our request.
use http_body_util::Full;
let some_bytes = vec![0_u8, 1, 2];
let mut req = Request::builder()
.method("POST")
.body(Full::<Bytes>::from(some_bytes))
.unwrap();
Note: While the request builder itself may not require the body to implement the Body trait, both the sender and connection returned by http1::handshake require the request's body to implement it.
With the body trait implemented for Vec<u8> (just one example that probably should implement body) we could leave out the http_body_util crate. Building a request would also become more intuitive and ergonomic.
let some_bytes = vec![0_u8, 1, 2];
let mut req = Request::builder()
.method("POST")
.body(some_bytes)
.unwrap();
Hi! I would like to try my hand on this issue.
I've been personally torn on this. I appreciate the explicitness of having Full, and I kind of regret that we stabilized with an implementation on String.
So, part of me resists adding it to any other standard buffer types.
But I also understand that one exists, so should we just swallow the pill and provide the rest? Maybe. I don't love it. But perhaps I'm just wrong.
I've launched a poll here #3747 . I say we give it a little bit and see what others think.
It seems like 80% of people (granted, only out of 5 responses) want the body trait implemented on additional types. I can get started working on this if that's good with you @seanmonstar
I've been personally torn on this. I appreciate the explicitness of having
Full, and I kind of regret that we stabilized with an implementation onString.So, part of me resists adding it to any other standard buffer types.
But I also understand that one exists, so should we just swallow the pill and provide the rest? Maybe. I don't love it. But perhaps I'm just wrong.
In hindsight, it makes sense to at least have an implementation for bytes if we have one for String.
Are there any plans to have an implementation for more native data types? If yes, then I would love to work on this.
I've already implemented this trait for Vec<u8>, but no other native types. However, it has yet to be merged, so I think the maintainers are still hesitant to extend this past the string type.