mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-28 01:32:57 +01:00
Allow to use Arc<Vec<u8>> as response/request body
This commit is contained in:
parent
631fe72a46
commit
11347e3c7d
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
## 0.4.4 (2018-03-xx)
|
## 0.4.4 (2018-03-xx)
|
||||||
|
|
||||||
|
* Allow to use Arc<Vec<u8>> as response/request body
|
||||||
|
|
||||||
* Fix handling of requests with an encoded body with a length > 8192 #93
|
* Fix handling of requests with an encoded body with a length > 8192 #93
|
||||||
|
|
||||||
## 0.4.3 (2018-03-03)
|
## 0.4.3 (2018-03-03)
|
||||||
|
31
src/body.rs
31
src/body.rs
@ -36,6 +36,8 @@ pub enum Binary {
|
|||||||
/// Shared string body
|
/// Shared string body
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
ArcSharedString(Arc<String>),
|
ArcSharedString(Arc<String>),
|
||||||
|
/// Shared vec body
|
||||||
|
SharedVec(Arc<Vec<u8>>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Body {
|
impl Body {
|
||||||
@ -115,6 +117,7 @@ impl Binary {
|
|||||||
Binary::Slice(slice) => slice.len(),
|
Binary::Slice(slice) => slice.len(),
|
||||||
Binary::SharedString(ref s) => s.len(),
|
Binary::SharedString(ref s) => s.len(),
|
||||||
Binary::ArcSharedString(ref s) => s.len(),
|
Binary::ArcSharedString(ref s) => s.len(),
|
||||||
|
Binary::SharedVec(ref s) => s.len(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,8 +137,9 @@ impl Clone for Binary {
|
|||||||
match *self {
|
match *self {
|
||||||
Binary::Bytes(ref bytes) => Binary::Bytes(bytes.clone()),
|
Binary::Bytes(ref bytes) => Binary::Bytes(bytes.clone()),
|
||||||
Binary::Slice(slice) => Binary::Bytes(Bytes::from(slice)),
|
Binary::Slice(slice) => Binary::Bytes(Bytes::from(slice)),
|
||||||
Binary::SharedString(ref s) => Binary::Bytes(Bytes::from(s.as_str())),
|
Binary::SharedString(ref s) => Binary::SharedString(s.clone()),
|
||||||
Binary::ArcSharedString(ref s) => Binary::Bytes(Bytes::from(s.as_str())),
|
Binary::ArcSharedString(ref s) => Binary::ArcSharedString(s.clone()),
|
||||||
|
Binary::SharedVec(ref s) => Binary::SharedVec(s.clone()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,6 +151,7 @@ impl Into<Bytes> for Binary {
|
|||||||
Binary::Slice(slice) => Bytes::from(slice),
|
Binary::Slice(slice) => Bytes::from(slice),
|
||||||
Binary::SharedString(s) => Bytes::from(s.as_str()),
|
Binary::SharedString(s) => Bytes::from(s.as_str()),
|
||||||
Binary::ArcSharedString(s) => Bytes::from(s.as_str()),
|
Binary::ArcSharedString(s) => Bytes::from(s.as_str()),
|
||||||
|
Binary::SharedVec(s) => Bytes::from(AsRef::<[u8]>::as_ref(s.as_ref())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -217,6 +222,18 @@ impl<'a> From<&'a Arc<String>> for Binary {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Arc<Vec<u8>>> for Binary {
|
||||||
|
fn from(body: Arc<Vec<u8>>) -> Binary {
|
||||||
|
Binary::SharedVec(body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> From<&'a Arc<Vec<u8>>> for Binary {
|
||||||
|
fn from(body: &'a Arc<Vec<u8>>) -> Binary {
|
||||||
|
Binary::SharedVec(Arc::clone(body))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl AsRef<[u8]> for Binary {
|
impl AsRef<[u8]> for Binary {
|
||||||
fn as_ref(&self) -> &[u8] {
|
fn as_ref(&self) -> &[u8] {
|
||||||
match *self {
|
match *self {
|
||||||
@ -224,6 +241,7 @@ impl AsRef<[u8]> for Binary {
|
|||||||
Binary::Slice(slice) => slice,
|
Binary::Slice(slice) => slice,
|
||||||
Binary::SharedString(ref s) => s.as_bytes(),
|
Binary::SharedString(ref s) => s.as_bytes(),
|
||||||
Binary::ArcSharedString(ref s) => s.as_bytes(),
|
Binary::ArcSharedString(ref s) => s.as_bytes(),
|
||||||
|
Binary::SharedVec(ref s) => s.as_ref().as_ref(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -304,6 +322,15 @@ mod tests {
|
|||||||
assert_eq!(Binary::from(&b).as_ref(), "test".as_bytes());
|
assert_eq!(Binary::from(&b).as_ref(), "test".as_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_shared_vec() {
|
||||||
|
let b = Arc::new(Vec::from(&b"test"[..]));
|
||||||
|
assert_eq!(Binary::from(b.clone()).len(), 4);
|
||||||
|
assert_eq!(Binary::from(b.clone()).as_ref(), &b"test"[..]);
|
||||||
|
assert_eq!(Binary::from(&b).len(), 4);
|
||||||
|
assert_eq!(Binary::from(&b).as_ref(), &b"test"[..]);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_bytes_mut() {
|
fn test_bytes_mut() {
|
||||||
let b = BytesMut::from("test");
|
let b = BytesMut::from("test");
|
||||||
|
Loading…
Reference in New Issue
Block a user