2020-03-06 01:07:35 +00:00
|
|
|
mod starwars;
|
|
|
|
|
|
|
|
use async_graphql::http::{graphiql_source, playground_source, GQLRequest};
|
2020-03-17 09:26:59 +00:00
|
|
|
use async_graphql::{GQLEmptyMutation, GQLEmptySubscription, Schema};
|
2020-03-06 01:07:35 +00:00
|
|
|
use mime;
|
|
|
|
use tide::{self, Request, Response};
|
|
|
|
|
2020-03-17 09:26:59 +00:00
|
|
|
type StarWarsSchema = Schema<starwars::QueryRoot, GQLEmptyMutation, GQLEmptySubscription>;
|
2020-03-06 01:07:35 +00:00
|
|
|
|
|
|
|
async fn index(mut request: Request<StarWarsSchema>) -> Response {
|
|
|
|
let gql_request: GQLRequest = request.body_json().await.unwrap();
|
|
|
|
let schema = request.state();
|
|
|
|
let gql_response = gql_request.execute(schema).await;
|
|
|
|
Response::new(200).body_json(&gql_response).unwrap()
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn gql_playground(_request: Request<StarWarsSchema>) -> Response {
|
|
|
|
Response::new(200)
|
2020-03-17 09:26:59 +00:00
|
|
|
.body_string(playground_source("/", None))
|
2020-03-06 01:07:35 +00:00
|
|
|
.set_mime(mime::TEXT_HTML_UTF_8)
|
|
|
|
}
|
|
|
|
async fn gql_graphiql(_request: Request<StarWarsSchema>) -> Response {
|
|
|
|
Response::new(200)
|
|
|
|
.body_string(graphiql_source("/"))
|
|
|
|
.set_mime(mime::TEXT_HTML_UTF_8)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[async_std::main]
|
|
|
|
async fn main() -> std::io::Result<()> {
|
2020-03-07 10:03:19 +00:00
|
|
|
let mut app = tide::with_state(
|
2020-03-17 09:26:59 +00:00
|
|
|
Schema::new(starwars::QueryRoot, GQLEmptyMutation, GQLEmptySubscription)
|
|
|
|
.data(starwars::StarWars::new()),
|
2020-03-07 10:03:19 +00:00
|
|
|
);
|
2020-03-06 01:07:35 +00:00
|
|
|
app.at("/").post(index);
|
|
|
|
app.at("/").get(gql_playground);
|
|
|
|
app.at("/graphiql").get(gql_graphiql);
|
|
|
|
app.listen("0.0.0.0:8000").await
|
|
|
|
}
|