Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module defines a type-level language to describe RPC-like microservices independently of the transport and protocol.
Synopsis
- type Package' = Package Symbol Symbol Symbol
- data Package serviceName methodName argName = Package (Maybe serviceName) [Service serviceName methodName argName]
- type Service' = Service Symbol Symbol Symbol
- data Service serviceName methodName argName = Service serviceName [ServiceAnnotation] [Method serviceName methodName argName]
- type Object = 'Service
- type ServiceAnnotation = Type
- type Method' = Method Symbol Symbol Symbol
- data Method serviceName methodName argName = Method methodName [ServiceAnnotation] [Argument serviceName argName] (Return serviceName)
- type ObjectField = 'Method
- type family LookupService (ss :: [Service snm mnm anm]) (s :: snm) :: Service snm mnm anm where ...
- type family LookupMethod (s :: [Method snm mnm anm]) (m :: mnm) :: Method snm mnm anm where ...
- data TypeRef serviceName where
- PrimitiveRef :: Type -> TypeRef serviceName
- ObjectRef :: serviceName -> TypeRef serviceName
- SchemaRef :: Schema typeName fieldName -> typeName -> TypeRef serviceName
- RegistryRef :: Registry -> Type -> Nat -> TypeRef serviceName
- THRef :: Type -> TypeRef serviceName
- ListRef :: TypeRef serviceName -> TypeRef serviceName
- OptionalRef :: TypeRef serviceName -> TypeRef serviceName
- type Argument' = Argument Symbol Symbol
- data Argument serviceName argName where
- ArgSingle :: Maybe argName -> [ServiceAnnotation] -> TypeRef serviceName -> Argument serviceName argName
- ArgStream :: Maybe argName -> [ServiceAnnotation] -> TypeRef serviceName -> Argument serviceName argName
- data Return serviceName where
Documentation
type Package' = Package Symbol Symbol Symbol Source #
Packages whose names are given by type-level strings.
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.
Service serviceName [ServiceAnnotation] [Method serviceName methodName argName] |
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.
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.
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.
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.
TypeRef
s are used to define arguments and result types.
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.
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
(MonadError ServerError m, handler ~ m ()) => Handles (chn :: ServiceChain snm) ('[] :: [Argument snm anm]) ('RetNothing :: Return snm) m handler Source # | |
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 # | |
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 # | |
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 # | |
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 # | |
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 # | |
Defined in Mu.Server |
data Return serviceName where Source #
Defines the different possibilities for returning information from a method.
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. |