NAME
GraphQL::Plugin::Convert::MojoPubSub - convert a Mojo PubSub server to GraphQL schema
SYNOPSIS
use GraphQL::Plugin::Convert::MojoPubSub;
use GraphQL::Type::Scalar qw($String);
my $pg = Mojo::Pg->new('postgresql://postgres@/test');
my $converted = GraphQL::Plugin::Convert::MojoPubSub->to_graphql(
{
username => $String->non_null,
message => $String->non_null,
},
$pg,
);
print $converted->{schema}->to_doc;
DESCRIPTION
This module implements the GraphQL::Plugin::Convert API to convert a Mojo pub-sub server (currently either Mojo::Pg::PubSub or Mojo::Redis::PubSub) to GraphQL::Schema with publish/subscribe functionality.
ARGUMENTS
To the to_graphql
method:
a hash-ref of field-names to GraphQL::Type objects. These must be both input and output types, so only scalars or enums. This allows you to pass in programmatically-created scalars or enums.
This will be used to construct the
fields
arguments for the GraphQL::Type::InputObject and GraphQL::Type::Object which are the input and output of the mutation and subscription respectively.an object compatible with Mojo::Redis, with a
pubsub
attribute.
Note the output type will have a dateTime
field added to it with type non-null DateTime
. Both input and output types will have a non-null channel
String
added.
E.g. for this input (implementing a trivial chat system):
{
username => $String->non_null,
message => $String->non_null,
}
The schema will look like:
scalar DateTime
input MessageInput {
channel: String!
username: String!
message: String!
}
type Message {
channel: String!
username: String!
message: String!
dateTime: DateTime!
}
type Query {
status: Boolean!
}
type Mutation {
publish(input: [MessageInput!]!): DateTime!
}
type Subscription {
subscribe(channels: [String!]): Message!
}
The subscribe
field takes a list of channels to subscribe to. If the list is null or empty, all channels will be subscribed to - a "firehose", implemented as an actual channel named _firehose
.
DEBUGGING
To debug, set environment variable GRAPHQL_DEBUG
to a true value.
AUTHOR
Ed J, <etj at cpan.org>
LICENSE
Copyright (C) Ed J
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.