mochi/query

Types

Argument definition for schema generation

pub type ArgDef {
  ArgDef(
    name: String,
    arg_type: schema.FieldType,
    description: option.Option(String),
    default_value: option.Option(dynamic.Dynamic),
  )
}

Constructors

pub opaque type FieldKind(parent)
pub type FieldOp(parent, result) =
  Op(FieldKind(parent), result)
pub type Guard =
  fn(schema.ExecutionContext) -> Result(Nil, String)
pub type MutationKind {
  MutationKind
}

Constructors

  • MutationKind
pub type MutationOp(result) =
  Op(MutationKind, result)

Op

opaque </>

Unified operation type for queries, mutations, subscriptions, and fields. The kind parameter encodes what kind of operation this is at the type level. Use the type aliases QueryOp, MutationOp, SubscriptionOp, FieldOp in annotations.

pub opaque type Op(kind, result)
pub type QueryKind {
  QueryKind
}

Constructors

  • QueryKind
pub type QueryOp(result) =
  Op(QueryKind, result)
pub opaque type SchemaBuilder
pub type SubscriptionKind {
  SubscriptionKind
}

Constructors

  • SubscriptionKind
pub type SubscriptionOp(event) =
  Op(SubscriptionKind, event)

Values

pub fn add_enum(
  builder: SchemaBuilder,
  e: schema.EnumType,
) -> SchemaBuilder
pub fn add_enums(
  builder: SchemaBuilder,
  enums: List(schema.EnumType),
) -> SchemaBuilder
pub fn add_inputs(
  builder: SchemaBuilder,
  inputs: List(schema.InputObjectType),
) -> SchemaBuilder
pub fn add_interfaces(
  builder: SchemaBuilder,
  interfaces: List(schema.InterfaceType),
) -> SchemaBuilder
pub fn add_mutation(
  builder: SchemaBuilder,
  m: Op(MutationKind, r),
) -> SchemaBuilder
pub fn add_mutations(
  builder: SchemaBuilder,
  mutations: List(Op(MutationKind, r)),
) -> SchemaBuilder
pub fn add_queries(
  builder: SchemaBuilder,
  queries: List(Op(QueryKind, r)),
) -> SchemaBuilder
pub fn add_query(
  builder: SchemaBuilder,
  q: Op(QueryKind, r),
) -> SchemaBuilder
pub fn add_scalar(
  builder: SchemaBuilder,
  s: schema.ScalarType,
) -> SchemaBuilder
pub fn add_scalars(
  builder: SchemaBuilder,
  scalars: List(schema.ScalarType),
) -> SchemaBuilder
pub fn add_subscription(
  builder: SchemaBuilder,
  s: Op(SubscriptionKind, e),
) -> SchemaBuilder
pub fn add_subscriptions(
  builder: SchemaBuilder,
  subscriptions: List(Op(SubscriptionKind, e)),
) -> SchemaBuilder
pub fn add_types(
  builder: SchemaBuilder,
  types: List(schema.ObjectType),
) -> SchemaBuilder
pub fn add_union(
  builder: SchemaBuilder,
  u: schema.UnionType,
) -> SchemaBuilder
pub fn add_unions(
  builder: SchemaBuilder,
  unions: List(schema.UnionType),
) -> SchemaBuilder
pub fn all_of(
  guard_fns: List(
    fn(schema.ExecutionContext) -> Result(Nil, String),
  ),
) -> fn(schema.ExecutionContext) -> Result(Nil, String)

Combine guards with AND logic — all must pass (checked in list order).

pub fn any_of(
  guard_fns: List(
    fn(schema.ExecutionContext) -> Result(Nil, String),
  ),
) -> fn(schema.ExecutionContext) -> Result(Nil, String)

Combine guards with OR logic — at least one must pass. Fails with the last error if all fail.

pub fn arg(name: String, arg_type: schema.FieldType) -> ArgDef

Create an argument definition

pub fn arg_with_default(
  name: String,
  arg_type: schema.FieldType,
  default: dynamic.Dynamic,
) -> ArgDef

Create an argument with a default value

pub fn arg_with_default_desc(
  name: String,
  arg_type: schema.FieldType,
  default: dynamic.Dynamic,
  description: String,
) -> ArgDef

Create an argument with default value and description

pub fn arg_with_desc(
  name: String,
  arg_type: schema.FieldType,
  description: String,
) -> ArgDef

Create an argument with description

pub fn build(builder: SchemaBuilder) -> schema.Schema
pub fn decode_input(
  args: args.Args,
  key: String,
  decoder: decode.Decoder(a),
) -> Result(a, error.GraphQLError)
pub fn field(
  name name: String,
  returns return_type: schema.FieldType,
  decode parent_decoder: fn(dynamic.Dynamic) -> Result(
    parent,
    String,
  ),
  resolve resolver: fn(parent, schema.ExecutionContext) -> Result(
    result,
    error.GraphQLError,
  ),
) -> Op(FieldKind(parent), result)

Define a field on a type with no extra arguments.

pub fn field_with_args(
  name name: String,
  args arg_defs: List(ArgDef),
  returns return_type: schema.FieldType,
  decode parent_decoder: fn(dynamic.Dynamic) -> Result(
    parent,
    String,
  ),
  resolve resolver: fn(parent, args.Args, schema.ExecutionContext) -> Result(
    result,
    error.GraphQLError,
  ),
) -> Op(FieldKind(parent), result)

Define a field on a type with arguments.

pub fn get_args(op: Op(k, r)) -> List(ArgDef)
pub fn get_bool(
  args: args.Args,
  key: String,
) -> Result(Bool, error.GraphQLError)
pub fn get_bool_or(
  args: args.Args,
  key: String,
  default: Bool,
) -> Bool
pub fn get_description(op: Op(k, r)) -> option.Option(String)
pub fn get_dynamic(
  args: args.Args,
  key: String,
) -> Result(dynamic.Dynamic, error.GraphQLError)
pub fn get_float(
  args: args.Args,
  key: String,
) -> Result(Float, error.GraphQLError)
pub fn get_float_or(
  args: args.Args,
  key: String,
  default: Float,
) -> Float
pub fn get_id(
  args: args.Args,
  key: String,
) -> Result(String, error.GraphQLError)
pub fn get_id_or(
  args: args.Args,
  key: String,
  default: String,
) -> String
pub fn get_int(
  args: args.Args,
  key: String,
) -> Result(Int, error.GraphQLError)
pub fn get_int_list(
  args: args.Args,
  key: String,
) -> Result(List(Int), error.GraphQLError)
pub fn get_int_or(
  args: args.Args,
  key: String,
  default: Int,
) -> Int
pub fn get_name(op: Op(k, r)) -> String
pub fn get_optional_bool(
  args: args.Args,
  key: String,
) -> option.Option(Bool)
pub fn get_optional_dynamic(
  args: args.Args,
  key: String,
) -> option.Option(dynamic.Dynamic)
pub fn get_optional_float(
  args: args.Args,
  key: String,
) -> option.Option(Float)
pub fn get_optional_id(
  args: args.Args,
  key: String,
) -> option.Option(String)
pub fn get_optional_int(
  args: args.Args,
  key: String,
) -> option.Option(Int)
pub fn get_optional_string(
  args: args.Args,
  key: String,
) -> option.Option(String)
pub fn get_string(
  args: args.Args,
  key: String,
) -> Result(String, error.GraphQLError)
pub fn get_string_list(
  args: args.Args,
  key: String,
) -> Result(List(String), error.GraphQLError)
pub fn get_string_or(
  args: args.Args,
  key: String,
  default: String,
) -> String
pub fn mutation(
  name name: String,
  returns return_type: schema.FieldType,
  resolve resolver: fn(schema.ExecutionContext) -> Result(
    result,
    error.GraphQLError,
  ),
) -> Op(MutationKind, result)
pub fn mutation_with_args(
  name name: String,
  args arg_defs: List(ArgDef),
  returns return_type: schema.FieldType,
  resolve resolver: fn(args.Args, schema.ExecutionContext) -> Result(
    result,
    error.GraphQLError,
  ),
) -> Op(MutationKind, result)
pub fn new() -> SchemaBuilder
pub fn query(
  name name: String,
  returns return_type: schema.FieldType,
  resolve resolver: fn(schema.ExecutionContext) -> Result(
    result,
    error.GraphQLError,
  ),
) -> Op(QueryKind, result)

Define a query with no arguments.

pub fn query_with_args(
  name name: String,
  args arg_defs: List(ArgDef),
  returns return_type: schema.FieldType,
  resolve resolver: fn(args.Args, schema.ExecutionContext) -> Result(
    result,
    error.GraphQLError,
  ),
) -> Op(QueryKind, result)

Define a query with arguments.

pub fn subscription(
  name name: String,
  returns return_type: schema.FieldType,
  topic topic: String,
) -> Op(SubscriptionKind, event)

Define a subscription with a static topic string.

pub fn subscription_with_args(
  name name: String,
  args arg_defs: List(ArgDef),
  returns return_type: schema.FieldType,
  topic topic_resolver: fn(args.Args, schema.ExecutionContext) -> Result(
    String,
    error.GraphQLError,
  ),
) -> Op(SubscriptionKind, event)

Define a subscription with arguments and a dynamic topic resolver.

pub fn to_field_def(op: Op(k, r)) -> schema.FieldDefinition

Convert any Op to a schema FieldDefinition.

pub fn with_cache(builder: SchemaBuilder) -> SchemaBuilder
pub fn with_common_scalars(
  builder: SchemaBuilder,
) -> SchemaBuilder

Register all built-in custom scalars (DateTime, Date, UUID, Email, URL, JSON).

pub fn with_description(op: Op(k, r), desc: String) -> Op(k, r)

Set the description. Works on any operation type.

pub fn with_encoder(
  op: Op(k, r),
  encoder: fn(r) -> dynamic.Dynamic,
) -> Op(k, r)

Override the result encoder. Works on any operation type.

pub fn with_guard(
  op: Op(k, r),
  guard_fn: fn(schema.ExecutionContext) -> Result(Nil, String),
) -> Op(k, r)

Add a guard. Works on any operation type. Guards run in the order added.

Search Document