将新行字符附加到 Hyper Body 结构
Append new line character to Hyper Body struct
我正在尝试修改使用 hyper 时从 echo 示例返回的响应。他们的代码示例是 here。
我的代码中唯一不同的是我试图在我的集合末尾附加一个换行符
(&Method::POST, "/echo/uppercase") => {
let newLine = "\n".as_bytes().to_vec();
let m = req.into_body()
.map_ok(|c| {
c.iter()
.map(|byte| byte.to_ascii_uppercase())
.collect::<Vec<u8>>()
.append(&mut newLine) <-- this line
});
*response.body_mut() = Body::wrap_stream(m);
},
编译器正在返回
*response.body_mut() = Body::wrap_stream(m);
^ the trait `std::convert::From<()>` is not implemented for `bytes::bytes::Bytes`
append 是否修改了集合的类型,使其不再被视为 wrap_stream
方法的 Future 流?
这也是在 hyper 中将内容附加到 Body
结构的首选方法吗?
闭包传递给 map_ok()
returns ()
,而不是您期望的 Vec<u8>
。
这是因为 Vec::append()
用于附加换行符 returns ()
,而不是修改后的 Vec
.
简单的解决方法:修改闭包为return Vec<u8>
:
|c| {
let mut v = c.iter()
.map(|byte| byte.to_ascii_uppercase())
.collect::<Vec<u8>>();
v.append(&mut newline);
v
}
由于换行符是一个字节的字符,直接将其添加到 Vec
可能更有意义:
v.push(b'\n');
这避免了为每个请求分配不必要的换行符 Vec
。
我正在尝试修改使用 hyper 时从 echo 示例返回的响应。他们的代码示例是 here。
我的代码中唯一不同的是我试图在我的集合末尾附加一个换行符
(&Method::POST, "/echo/uppercase") => {
let newLine = "\n".as_bytes().to_vec();
let m = req.into_body()
.map_ok(|c| {
c.iter()
.map(|byte| byte.to_ascii_uppercase())
.collect::<Vec<u8>>()
.append(&mut newLine) <-- this line
});
*response.body_mut() = Body::wrap_stream(m);
},
编译器正在返回
*response.body_mut() = Body::wrap_stream(m);
^ the trait `std::convert::From<()>` is not implemented for `bytes::bytes::Bytes`
append 是否修改了集合的类型,使其不再被视为 wrap_stream
方法的 Future 流?
这也是在 hyper 中将内容附加到 Body
结构的首选方法吗?
闭包传递给 map_ok()
returns ()
,而不是您期望的 Vec<u8>
。
这是因为 Vec::append()
用于附加换行符 returns ()
,而不是修改后的 Vec
.
简单的解决方法:修改闭包为return Vec<u8>
:
|c| {
let mut v = c.iter()
.map(|byte| byte.to_ascii_uppercase())
.collect::<Vec<u8>>();
v.append(&mut newline);
v
}
由于换行符是一个字节的字符,直接将其添加到 Vec
可能更有意义:
v.push(b'\n');
这避免了为每个请求分配不必要的换行符 Vec
。