gpt4 book ai didi

rust - 在Hyper Body结构上附加换行符

转载 作者:行者123 更新时间:2023-12-03 11:37:57 25 4
gpt4 key购买 nike

我正在尝试修改使用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`

追加是否会修改集合的类型,以便不再将其视为 wrap_stream方法的Future流?

这也是在hyper中将事物附加到 Body结构的首选方法吗?

最佳答案

传递给map_ok()的闭包返回(),而不是您期望的Vec<u8>

这是因为用于添加换行符的Vec::append()返回(),而不是修改后的Vec

简单的解决方案:修改闭包以返回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

关于rust - 在Hyper Body结构上附加换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59536493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com