gpt4 book ai didi

rust - 如何从字符串创建响应?(Rust-Rocket)

转载 作者:行者123 更新时间:2023-11-29 08:31:07 26 4
gpt4 key购买 nike

我试图为“MyConfig”结构实现 Responder 特性。但是我不知道如何创建可以从函数返回的Response(包括类型为String的bo​​dy)。

我试过这段代码。

#[derive(Debug)]
struct MyConfig {
body: String,
}

impl<'r> Responder<'r> for MyConfig {
fn respond_to(self, _req: &Request) -> response::Result<'r> {
let body: String = self.body.clone();
Response::build()
.status(Status::Ok)
// .raw_header("Access-Control-Allow-Origin", "*")
.sized_body(Cursor::new(body.as_str()))
.ok()
}
}

这无法编译,并显示此错误。

error[E0515]: cannot return value referencing local variable `body`
--> src/main.rs:53:9
|
53 | / Response::build()
54 | | .status(Status::Ok)
55 | | // .raw_header("Access-Control-Allow-Origin", "*")
56 | | .sized_body(Cursor::new(body.as_str()))
| | ---- `body` is borrowed here
57 | | .ok()
| |_________________^ returns a value referencing data owned by the current function

最佳答案

body 是局部变量,body.as_str() 是对该局部变量的引用。该引用的生存时间不够长,无法作为函数返回的结果的一部分包含在内。

因为在 Cursor::new() 中使用它之后,您不需要 body 任何东西,您可以直接传递它而不是作为引用:

.sized_body(Cursor::new(body))

预计到达时间:我找到了这个例子:

Response::build()
.sized_body(Cursor::new(format!("{}:{}", self.name, self.age)))

(来自 https://api.rocket.rs/v0.4/rocket/response/trait.Responder.html)

他们使用字符串而不是引用调用 Cursor::new(),因此 Cursor::new(body) 应该可以工作。

不过,想想看,既然您将 self 直接传递给函数而不是作为引用,也许您可​​以完全跳过创建 body 而只是说:

.sized_body(Cursor::new(self.body))

关于rust - 如何从字符串创建响应?(Rust-Rocket),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57619443/

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