将新行字符附加到 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