2020-03-05 13:34:31 +00:00
|
|
|
mod starwars;
|
2020-03-05 00:39:56 +00:00
|
|
|
|
|
|
|
use actix_web::{guard, web, App, HttpResponse, HttpServer};
|
|
|
|
use async_graphql::http::{graphiql_source, playground_source, GQLRequest, GQLResponse};
|
|
|
|
use async_graphql::{GQLEmptyMutation, Schema};
|
|
|
|
|
2020-03-05 13:34:31 +00:00
|
|
|
type StarWarsSchema = Schema<starwars::QueryRoot, GQLEmptyMutation>;
|
2020-03-05 00:39:56 +00:00
|
|
|
|
2020-03-05 13:34:31 +00:00
|
|
|
async fn index(s: web::Data<StarWarsSchema>, req: web::Json<GQLRequest>) -> web::Json<GQLResponse> {
|
2020-03-05 00:39:56 +00:00
|
|
|
web::Json(req.into_inner().execute(&s).await)
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn gql_playgound() -> HttpResponse {
|
|
|
|
HttpResponse::Ok()
|
|
|
|
.content_type("text/html; charset=utf-8")
|
|
|
|
.body(playground_source("/"))
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn gql_graphiql() -> HttpResponse {
|
|
|
|
HttpResponse::Ok()
|
|
|
|
.content_type("text/html; charset=utf-8")
|
|
|
|
.body(graphiql_source("/"))
|
|
|
|
}
|
|
|
|
|
|
|
|
#[actix_rt::main]
|
|
|
|
async fn main() -> std::io::Result<()> {
|
2020-03-05 13:34:31 +00:00
|
|
|
HttpServer::new(move || {
|
2020-03-05 00:39:56 +00:00
|
|
|
App::new()
|
2020-03-05 13:34:31 +00:00
|
|
|
.data(Schema::new(
|
|
|
|
starwars::QueryRoot(starwars::StarWars::new()),
|
|
|
|
GQLEmptyMutation,
|
|
|
|
))
|
2020-03-05 00:39:56 +00:00
|
|
|
.service(web::resource("/").guard(guard::Post()).to(index))
|
|
|
|
.service(web::resource("/").guard(guard::Get()).to(gql_playgound))
|
2020-03-05 06:23:55 +00:00
|
|
|
.service(
|
|
|
|
web::resource("/graphiql")
|
|
|
|
.guard(guard::Get())
|
|
|
|
.to(gql_graphiql),
|
|
|
|
)
|
2020-03-05 00:39:56 +00:00
|
|
|
})
|
|
|
|
.bind("127.0.0.1:8000")?
|
|
|
|
.run()
|
|
|
|
.await
|
|
|
|
}
|