use juniper::FieldResult; use juniper::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, home_planet: String, } #[derive(GraphQLInputObject)] #[graphql(description = "A humanoid creature in the Star Wars universe")] struct NewHuman { name: String, appears_in: Vec, home_planet: String, } pub struct QueryRoot; #[juniper::object] impl QueryRoot { fn human(id: String) -> FieldResult { Ok(Human { id: "1234".to_owned(), name: "Luke".to_owned(), appears_in: vec![Episode::NewHope], home_planet: "Mars".to_owned(), }) } } pub struct MutationRoot; #[juniper::object] impl MutationRoot { fn createHuman(new_human: NewHuman) -> FieldResult { 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>; pub fn create_schema() -> Schema { Schema::new(QueryRoot {}, MutationRoot {}) }