Skip to main content

Crate reinhardt_graphql

Crate reinhardt_graphql 

Source
Expand description

GraphQL support for Reinhardt framework

This crate provides GraphQL API support for the Reinhardt framework.

§Features

  • graphql-grpc: GraphQL facade over gRPC for Query/Mutation
  • subscription: gRPC-based Subscriptions (Rust 2024 compatible)
  • di: Dependency injection support for GraphQL resolvers
  • full: All features enabled

§Dependency Injection

Enable the di feature to use dependency injection in GraphQL resolvers:

[dependencies]
reinhardt-graphql = { version = "0.1", features = ["di"] }

Then use the #[graphql_handler] macro:

#[Object]
impl Query {
    async fn user(&self, ctx: &Context<'_>, id: ID) -> Result<User> {
        user_impl(ctx, id).await
    }
}

#[graphql_handler]
async fn user_impl(
    ctx: &Context<'_>,
    id: ID,
    #[inject] db: DatabaseConnection,
) -> Result<User> {
    // db is automatically resolved
    db.fetch_user(&id).await
}

Re-exports§

pub use context::ContextError;
pub use context::DataLoader;
pub use context::GraphQLContext;
pub use context::LoaderError;
pub use schema::AppSchema;
pub use schema::CreateUserInput;
pub use schema::Mutation;
pub use schema::Query;
pub use schema::QueryLimits;
pub use schema::User;
pub use schema::UserStorage;
pub use schema::create_schema;
pub use schema::create_schema_with_limits;
pub use schema::validate_query;
pub use subscription::DEFAULT_CHANNEL_CAPACITY;
pub use subscription::EventBroadcaster;
pub use subscription::SubscriptionRoot;
pub use subscription::UserEvent;
pub use di::GraphQLContextExt;
pub use di::SchemaBuilderExt;

Modules§

context
GraphQL context for request-scoped data
di
Dependency injection support for GraphQL resolvers
resolvers
GraphQL resolvers
schema
subscription
types
GraphQL type definitions

Attribute Macros§

graphql_handler
Attribute macro for GraphQL resolvers with dependency injection support