pub fn init<R, Query, Mutation, Subscription, S>(
    schema: RootNode<'static, Query, Mutation, Subscription, S>
) -> TauriPlugin<R> where
    R: Runtime,
    Query: GraphQLTypeAsync<S, Context = Context<R>> + Send + 'static,
    Query::TypeInfo: Send + Sync,
    Mutation: GraphQLTypeAsync<S, Context = Context<R>> + Send + 'static,
    Mutation::TypeInfo: Send + Sync,
    Subscription: GraphQLSubscriptionType<S, Context = Context<R>> + Send + 'static,
    Subscription::TypeInfo: Send + Sync,
    S: ScalarValue + Send + Sync + 'static, 
Expand description

Initializes the GraphQL plugin

This plugin exposes a juniper GraphQL endpoint via Tauri’s IPC system, allowing the frontend to invoke backend functionality through GraphQL. This does not open a web server.

The schema argument must be a valid juniper::RootNode.

Example

use juniper::{EmptyMutation, EmptySubscription, FieldResult, GraphQLObject, RootNode, graphql_object};
use tauri_plugin_graphql::Context as GraphQLContext;

#[derive(GraphQLObject)]
struct User {
    id: i32,
    name: String
}

struct Query;

// Implement resolvers for all possible queries.
#[graphql_object(context = GraphQLContext)]
impl Query {
    fn me() -> FieldResult<User> {
        Ok(User {
            id: 1,
            name: "Luke Skywalker".to_string(),
        })
    }
}

// A shorter alias for our apps schema. Note that this schema has no mutations or subscriptions,
// so we specify `EmptyMutation` and `EmptySubscription` respectively.
type Schema = RootNode<
  'static,
  Query,
  EmptyMutation<GraphQLContext>,
  EmptySubscription<GraphQLContext>
>;

let schema = Schema::new(
    Query,
    EmptyMutation::<GraphQLContext>::new(),
    EmptySubscription::<GraphQLContext>::new(),
);

tauri::Builder::default()
    .plugin(tauri_plugin_graphql::init(schema));