You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: main.rs
    path of file: ./repos/prisma-client-rust/examples/axum-graphql/src
    
    the code of the file until where you have to start completion: use async_graphql::http::{playground_source, GraphQLPlaygroundConfig};
use async_graphql_axum::{GraphQLRequest, GraphQLResponse};
use axum::{
    extract::Extension,
    response::{Html, IntoResponse},
    routing::get,
    Router,
};
use graphql::schema::{build_schema, AppSchema};

#[allow(warnings, unused)]
pub mod db;
pub mod graphql;

async fn graphql_handler(schema: Extension<AppSchema>, req: GraphQLRequest) -> GraphQLResponse {
    schema.execute(req.into_inner()).await.into()
}

async fn graphql_playground() -> impl IntoResponse {
    Html(playground_source(Gr
    
async fn main() {
    let schema = build_schema().await;

    let app = Router::new()
        // I prefer to prefix my graphql endpoint with /api, but use whatever you like.
        // just make sure it matches the path in graphql_playground()
        .route(
            "/api/graphql",
            get(graphql_playground).post(graphql_handler),
        )
        .layer(Extension(schema));

    // macos Monterey i hate u so much for causing me so much headache to figure out
    // port 5000 is now taken??
    println!("Playground: http://localhost:5001/api/graphql");

    axum::Server::bind(&"0.0.0.0:5001".parse().unwrap())
        .serve(app.into_make_service())
        .await
        .unwrap();
}