use super::{Operation, QueryFragment, QueryVariables, StreamingOperation};
pub trait QueryBuilder<Variables>: Sized {
fn build(vars: Variables) -> Operation<Self, Variables>;
}
impl<T, Variables> QueryBuilder<Variables> for T
where
Variables: QueryVariables,
T: QueryFragment<VariablesFields = Variables::Fields>,
T::SchemaType: crate::schema::QueryRoot,
{
fn build(vars: Variables) -> Operation<T, Variables> {
Operation::<T, Variables>::query(vars)
}
}
pub trait MutationBuilder<Variables>: Sized {
fn build(args: Variables) -> Operation<Self, Variables>;
}
impl<T, Variables> MutationBuilder<Variables> for T
where
Variables: QueryVariables,
T: QueryFragment<VariablesFields = Variables::Fields>,
T::SchemaType: crate::schema::MutationRoot,
{
fn build(vars: Variables) -> Operation<Self, Variables> {
Operation::<T, Variables>::mutation(vars)
}
}
pub trait SubscriptionBuilder<Variables>: Sized {
fn build(vars: Variables) -> StreamingOperation<Self, Variables>;
}
impl<T, Variables> SubscriptionBuilder<Variables> for T
where
Variables: QueryVariables,
T: QueryFragment<VariablesFields = Variables::Fields>,
T::SchemaType: crate::schema::SubscriptionRoot,
{
fn build(vars: Variables) -> StreamingOperation<Self, Variables> {
StreamingOperation::<T, Variables>::subscription(vars)
}
}