mu-rpc-0.3.0.0: Protocol-independent declaration of services and servers.
Safe HaskellNone
LanguageHaskell2010

Mu.Rpc

Description

This module defines a type-level language to describe RPC-like microservices independently of the transport and protocol.

Synopsis

Documentation

type Package' = Package Symbol Symbol Symbol Source #

Packages whose names are given by type-level strings.

data Package serviceName methodName argName Source #

A package is a set of services.

Constructors

Package (Maybe serviceName) [Service serviceName methodName argName] 

type Service' = Service Symbol Symbol Symbol Source #

Services whose names are given by type-level strings.

data Service serviceName methodName argName Source #

A service is a set of methods.

Constructors

Service serviceName [ServiceAnnotation] [Method serviceName methodName argName] 

type Object = 'Service Source #

An object is a set of fields, in GraphQL lingo.

type ServiceAnnotation = Type Source #

Annotations for services. At this moment, such annotations can be of any type.

type Method' = Method Symbol Symbol Symbol Source #

Methods whose names are given by type-level strings.

data Method serviceName methodName argName Source #

A method is defined by its name, arguments, and return type.

Constructors

Method methodName [ServiceAnnotation] [Argument serviceName argName] (Return serviceName) 

type ObjectField = 'Method Source #

A field in an object takes some input objects, and returns a value or some other object, in GraphQL lingo.

type family LookupService (ss :: [Service snm mnm anm]) (s :: snm) :: Service snm mnm anm where ... Source #

Look up a service in a package definition using its name.

Equations

LookupService '[] s = TypeError ('Text "could not find method " :<>: 'ShowType s) 
LookupService ('Service s anns ms ': ss) s = 'Service s anns ms 
LookupService (other ': ss) s = LookupService ss s 

type family LookupMethod (s :: [Method snm mnm anm]) (m :: mnm) :: Method snm mnm anm where ... Source #

Look up a method in a service definition using its name.

Equations

LookupMethod '[] m = TypeError ('Text "could not find method " :<>: 'ShowType m) 
LookupMethod ('Method m anns args r ': ms) m = 'Method m anns args r 
LookupMethod (other ': ms) m = LookupMethod ms m 

data TypeRef serviceName where Source #

Defines a reference to a type, either primitive or coming from the schema. TypeRefs are used to define arguments and result types.

Constructors

PrimitiveRef :: Type -> TypeRef serviceName

A primitive type.

ObjectRef :: serviceName -> TypeRef serviceName

Chain with another service.

SchemaRef :: Schema typeName fieldName -> typeName -> TypeRef serviceName

Point to schema.

RegistryRef :: Registry -> Type -> Nat -> TypeRef serviceName

Registry subject, type to convert to, and preferred serialization version

THRef :: Type -> TypeRef serviceName

To be used only during TH generation!

ListRef :: TypeRef serviceName -> TypeRef serviceName

Represents a list of values.

OptionalRef :: TypeRef serviceName -> TypeRef serviceName

Represents a possibly-missing value.

type Argument' = Argument Symbol Symbol Source #

Arguments whose names are given by type-level strings.

data Argument serviceName argName where Source #

Defines the way in which arguments are handled.

Constructors

ArgSingle :: Maybe argName -> [ServiceAnnotation] -> TypeRef serviceName -> Argument serviceName argName

Use a single value.

ArgStream :: Maybe argName -> [ServiceAnnotation] -> TypeRef serviceName -> Argument serviceName argName

Consume a stream of values.

Instances

Instances details
(MonadError ServerError m, handler ~ m ()) => Handles (chn :: ServiceChain snm) ('[] :: [Argument snm anm]) ('RetNothing :: Return snm) m handler Source # 
Instance details

Defined in Mu.Server

(MonadError ServerError m, ToRef chn ref v, handler ~ (ConduitT v Void m () -> m ())) => Handles (chn :: ServiceChain serviceName) ('[] :: [Argument serviceName anm]) ('RetStream ref :: Return serviceName) m handler Source # 
Instance details

Defined in Mu.Server

(MonadError ServerError m, ToRef chn ref v, handler ~ m v) => Handles (chn :: ServiceChain serviceName) ('[] :: [Argument serviceName anm]) ('RetSingle ref :: Return serviceName) m handler Source # 
Instance details

Defined in Mu.Server

(MonadError ServerError m, ToRef chn eref e, ToRef chn vref v, handler ~ m (Either e v)) => Handles (chn :: ServiceChain serviceName) ('[] :: [Argument serviceName anm]) ('RetThrows eref vref :: Return serviceName) m handler Source # 
Instance details

Defined in Mu.Server

(MonadError ServerError m, FromRef chn ref t, Handles chn args ret m h, handler ~ (ConduitT () t m () -> h)) => Handles (chn :: ServiceChain serviceName) ('ArgStream aname anns ref ': args :: [Argument serviceName anm]) (ret :: Return serviceName) m handler Source # 
Instance details

Defined in Mu.Server

(FromRef chn ref t, Handles chn args ret m h, handler ~ (t -> h)) => Handles (chn :: ServiceChain serviceName) ('ArgSingle aname anns ref ': args :: [Argument serviceName anm]) (ret :: Return serviceName) m handler Source # 
Instance details

Defined in Mu.Server

data Return serviceName where Source #

Defines the different possibilities for returning information from a method.

Constructors

RetNothing :: Return serviceName

Fire and forget.

RetSingle :: TypeRef serviceName -> Return serviceName

Return a single value.

RetStream :: TypeRef serviceName -> Return serviceName

Return a stream of values.

RetThrows :: TypeRef serviceName -> TypeRef serviceName -> Return serviceName

Return a value or an error.