gpt4 book ai didi

rust - 如何编写一个简单的返回json或html的扭曲处理程序?

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

我有以下几点:

use warp::Filter;

pub struct Router {}

impl Router {
pub async fn handle(
&self,
) -> std::result::Result<impl warp::Reply, warp::Rejection> {

let uri = "/path";

match uri {
"/metrics-list" => {
let empty : Vec<u8> = Vec::new();
Ok(warp::reply::json(&empty))
}

"/metrics-ips" => {
let empty : Vec<u8> = Vec::new();
Ok(warp::reply::json(&empty))
}

&_ => {
Err(warp::reject::reject())
}
}
}
}

#[tokio::main]
pub async fn main() {
let r = Router {};

let handler = warp::path("/").map(|| r.handle());

warp::serve(handler);
// .run(([0, 0, 0, 0], 3000))
// .await;
}
但是即使使用这个简化的示例,我仍然会出错:
error[E0277]: the trait bound `impl warp::Future: warp::Reply` is not satisfied
--> src/main.rs:41:17
|
41 | warp::serve(handler);
| ^^^^^^^ the trait `warp::Reply` is not implemented for `impl warp::Future`
|
::: $HOME/.cargo/registry/src/github.com-1ecc6299db9ec823/warp-0.2.5/src/server.rs:26:17
|
26 | F::Extract: Reply,
| ----- required by this bound in `warp::serve`
|
= note: required because of the requirements on the impl of `warp::Reply` for `(impl warp::Future,)`
这是为什么?

最佳答案

一种解决方案是对所有答复都调用.into_response(),然后将返回类型从std::result::Result<impl warp::Reply, warp::Rejection>更改为std::result::Result<warp::reply::Response, warp::Rejection>

pub async fn handle(
&self,
) -> std::result::Result<warp::reply::Response, warp::Rejection> {

let uri = "/path";

match uri {
"/metrics-list" => {
let empty : Vec<u8> = Vec::new();
Ok(warp::reply::json(&empty).into_response())
}

"/metrics-ips" => {
let empty : Vec<u8> = Vec::new();
Ok(warp::reply::json(&empty).into_response())
}

&_ => {
Err(warp::reject::reject().into_response())
}
}
}
原因是如果我理解正确,那么在您的返回类型中包含 impl Trait可使您仅使用一次实现该特征的类型,因为您的函数只能具有一个返回类型。

关于rust - 如何编写一个简单的返回json或html的扭曲处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64175045/

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