#![allow(dead_code, unused_variables, unused_imports)] #[macro_use] extern crate juniper; use juniper::*; use juniper_from_schema::graphql_schema; graphql_schema! { schema { query: Query } type Query { search(query: String!): [SearchResult!]! @juniper(ownership: "owned") } union SearchResult = Article | Tweet type Article { id: ID! text: String! } type Tweet { id: ID! text: String! } } pub struct Context; impl juniper::Context for Context {} pub struct Article { id: ID, text: String, } impl ArticleFields for Article { fn field_id(&self, executor: &Executor<'_, Context>) -> FieldResult<&ID> { unimplemented!() } fn field_text(&self, executor: &Executor<'_, Context>) -> FieldResult<&String> { unimplemented!() } } pub struct Tweet { id: ID, text: String, } impl TweetFields for Tweet { fn field_id(&self, executor: &Executor<'_, Context>) -> FieldResult<&ID> { unimplemented!() } fn field_text(&self, executor: &Executor<'_, Context>) -> FieldResult<&String> { unimplemented!() } } pub struct Query; impl QueryFields for Query { fn field_search( &self, executor: &Executor<'_, Context>, trail: &QueryTrail<'_, SearchResult, Walked>, query: String, ) -> FieldResult> { let article: Article = Article { id: ID::new("1"), text: "Business".to_string(), }; let tweet: Tweet = Tweet { id: ID::new("2"), text: "1 weird tip".to_string(), }; let posts = vec![SearchResult::from(article), SearchResult::from(tweet)]; Ok(posts) } } fn main() {}