pub struct GenericGraphQLResolver<E, C, U, S>where
E: Clone + Send + Sync + 'static,
C: Send + Sync + 'static,
U: Send + Sync + 'static,
S: GraphQLCapableService<E, C, U>,{ /* private fields */ }Expand description
Generic GraphQL resolver.
This struct holds the service and provides named methods that match
GraphQL field names (query_list, mutation_create, etc.).
The actual #[Object] / #[Subscription] annotations are placed in
generated wrapper code that calls these methods — keeping the generic
base free from async-graphql attributes.
§Extension pattern
// Generated type alias (1 line):
pub type OrderGqlResolver = GenericGraphQLResolver<Order, CreateOrderDto, UpdateOrderDto, OrderService>;
// Custom decorator adds entity-specific fields:
pub struct OrderGqlResolverCustom {
base: Arc<OrderGqlResolver>,
pricing: Arc<PricingService>,
}
#[Object]
impl OrderGqlResolverCustom {
// Delegate standard fields to base
async fn order(&self, id: ID) -> Option<Order> {
self.base.query_get_by_id(&id.to_string()).await.ok().flatten()
}
// Add entity-specific field
async fn order_price(&self, id: ID) -> f64 {
self.pricing.calculate(&id.to_string()).await
}
}Implementations§
Source§impl<E, C, U, S> GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> GenericGraphQLResolver<E, C, U, S>
pub fn new(service: Arc<S>) -> Self
pub fn service(&self) -> &Arc<S> ⓘ
Sourcepub async fn query_get_by_id(&self, id: &str) -> ServiceResult<Option<E>>
pub async fn query_get_by_id(&self, id: &str) -> ServiceResult<Option<E>>
GraphQL query: entity(id: ID!): EntityType
Sourcepub async fn query_list(
&self,
page: u32,
limit: u32,
filters: HashMap<String, String>,
) -> ServiceResult<GraphQLListResult<E>>
pub async fn query_list( &self, page: u32, limit: u32, filters: HashMap<String, String>, ) -> ServiceResult<GraphQLListResult<E>>
GraphQL query: entities(page: Int, limit: Int, filters: JSON): EntityListResult
Sourcepub async fn query_list_deleted(
&self,
page: u32,
limit: u32,
) -> ServiceResult<GraphQLListResult<E>>
pub async fn query_list_deleted( &self, page: u32, limit: u32, ) -> ServiceResult<GraphQLListResult<E>>
GraphQL query: deletedEntities(page: Int, limit: Int): EntityListResult
Sourcepub async fn mutation_create(&self, dto: C) -> ServiceResult<E>
pub async fn mutation_create(&self, dto: C) -> ServiceResult<E>
GraphQL mutation: createEntity(input: CreateInput!): EntityType!
Sourcepub async fn mutation_update(
&self,
id: &str,
dto: U,
) -> ServiceResult<Option<E>>
pub async fn mutation_update( &self, id: &str, dto: U, ) -> ServiceResult<Option<E>>
GraphQL mutation: updateEntity(id: ID!, input: UpdateInput!): EntityType
Sourcepub async fn mutation_delete(&self, id: &str) -> ServiceResult<bool>
pub async fn mutation_delete(&self, id: &str) -> ServiceResult<bool>
GraphQL mutation: deleteEntity(id: ID!): Boolean!
Sourcepub async fn mutation_restore(&self, id: &str) -> ServiceResult<Option<E>>
pub async fn mutation_restore(&self, id: &str) -> ServiceResult<Option<E>>
GraphQL mutation: restoreEntity(id: ID!): EntityType
Sourcepub async fn mutation_empty_trash(&self) -> ServiceResult<u64>
pub async fn mutation_empty_trash(&self) -> ServiceResult<u64>
GraphQL mutation: emptyEntityTrash: Int!
Trait Implementations§
Source§impl<E, C, U, S> Clone for GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> Clone for GenericGraphQLResolver<E, C, U, S>
Auto Trait Implementations§
impl<E, C, U, S> Freeze for GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> RefUnwindSafe for GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> Send for GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> Sync for GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> Unpin for GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> UnsafeUnpin for GenericGraphQLResolver<E, C, U, S>
impl<E, C, U, S> UnwindSafe for GenericGraphQLResolver<E, C, U, S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more