async_graphql::Response:使用warp时不满足Reply



我正试图用异步GraphQL和warp:构建一个基本的GraphQL服务器

use async_graphql::{Object, Schema, EmptyMutation, EmptySubscription, Response, Context};
use std::convert::Infallible;
use warp::{Filter};
#[tokio::main]
async fn main() {
let schema = Schema::build(Query, EmptyMutation, EmptySubscription).finish();
// schema processor
let graphql_api = async_graphql_warp::graphql(schema).and_then(
|(schema, request): (
Schema<Query, EmptyMutation, EmptySubscription>,
async_graphql::Request,
)| async move { Ok::<_, Infallible>(Response::from(schema.execute(request).await)) },
);
let routes = graphql_api;
warp::serve(routes).bind(([0,0,0,0], 3000)).await;
}
pub struct Book {
id: String,
name: String,
author: String,
}
#[Object]
impl Book {
async fn id(&self) -> &str {
&self.id
}
async fn name(&self) -> &str {
&self.name
}
async fn author(&self) -> &str {
&self.author
}
}
struct Query;
#[Object]
impl Query {
async fn books(&self, _ctx: &Context<'_>) -> Vec<Book> {
vec![new_book("id1", "Penturian", "Gibsons"), new_book("id2", "Dekatos", "Gibsons")]
}
}
fn new_book(id: &str, name: &str, author: &str) -> Book {
Book { id: id.to_string(), name: name.to_string(), author: author.to_string()}
}

我得到一个编译错误:

error[E0277]: the trait bound `async_graphql::Response: Reply` is not satisfied
--> src/main.rs:22:17
|
22 |     warp::serve(routes).bind(([0,0,0,0], 3000)).await;
|                 ^^^^^^ the trait `Reply` is not implemented for `async_graphql::Response`
| 
::: /Users/stephen.gibson/.cargo/registry/src/github.com-1ecc6299db9ec823/warp-0.3.1/src/server.rs:26:17
|
26 |     F::Extract: Reply,
|                 ----- required by this bound in `serve`
|
= note: required because of the requirements on the impl of `Reply` for `(async_graphql::Response,)`

这对我来说没有多大意义。

Cargo.toml:

[package]
name = "graphql"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
async-graphql = "2.0"
async-graphql-warp = "2.0"
tokio = { version = "1.0.2", features = ["macros", "rt-multi-thread"] }
warp = "0.3"
serde_json = "1.0"
serde_derive = "1.0"
serde = "1.0"
futures = "0.3"

我导入错误。我正在导入async_graphql::Response,但没有导入async_graphql_warp::Response。

相关内容

  • 没有找到相关文章

最新更新