1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::mem;
use bytes::*;
#[allow(dead_code)]
pub fn bytes_concat(mut a: Bytes, b: Bytes) -> Bytes {
if b.is_empty() {
a
} else if a.is_empty() {
b
} else {
bytes_extend_with(&mut a, b);
a
}
}
pub fn bytes_extend_with_slice(target: &mut Bytes, append: &[u8]) {
let mut bytes_mut = BytesMut::from(mem::replace(target, Bytes::new()));
bytes_mut_extend_with_slice(&mut bytes_mut, append);
mem::replace(target, bytes_mut.freeze());
}
pub fn bytes_extend_with(target: &mut Bytes, append: Bytes) {
bytes_extend_with_slice(target, &append[..]);
}
pub fn bytes_mut_extend_with_slice(target: &mut BytesMut, append: &[u8]) {
target.reserve(append.len());
target.put_slice(append);
}
#[cfg(test)]
mod test {
use super::*;
use bytes::*;
#[test]
fn test_bytes_concat() {
let a = Bytes::from("aabb");
let b = Bytes::from("ccddee");
let r = bytes_concat(a, b);
let e = Bytes::from("aabbccddee");
assert_eq!(e, r);
}
}