1
0
mirror of https://github.com/actix/examples synced 2025-02-08 20:06:07 +01:00
2022-08-28 18:39:28 +01:00

62 lines
1.4 KiB
Rust

use juniper::{EmptySubscription, FieldResult, RootNode};
#[derive(GraphQLEnum)]
enum Episode {
NewHope,
Empire,
Jedi,
}
use juniper::{GraphQLEnum, GraphQLInputObject, GraphQLObject};
#[derive(GraphQLObject)]
#[graphql(description = "A humanoid creature in the Star Wars universe")]
struct Human {
id: String,
name: String,
appears_in: Vec<Episode>,
home_planet: String,
}
#[derive(GraphQLInputObject)]
#[graphql(description = "A humanoid creature in the Star Wars universe")]
struct NewHuman {
name: String,
appears_in: Vec<Episode>,
home_planet: String,
}
pub struct QueryRoot;
#[juniper::graphql_object]
impl QueryRoot {
fn human(_id: String) -> FieldResult<Human> {
Ok(Human {
id: "1234".to_owned(),
name: "Luke".to_owned(),
appears_in: vec![Episode::NewHope],
home_planet: "Mars".to_owned(),
})
}
}
pub struct MutationRoot;
#[juniper::graphql_object]
impl MutationRoot {
fn create_human(new_human: NewHuman) -> FieldResult<Human> {
Ok(Human {
id: "1234".to_owned(),
name: new_human.name,
appears_in: new_human.appears_in,
home_planet: new_human.home_planet,
})
}
}
pub type Schema = RootNode<'static, QueryRoot, MutationRoot, EmptySubscription>;
pub fn create_schema() -> Schema {
Schema::new(QueryRoot {}, MutationRoot {}, EmptySubscription::new())
}