Module
Yoga.Fastify.Om.API
- Package
- purescript-yoga-fastify-om
- Repository
- rowtype-yoga/purescript-yoga-fastify-om
#registerAPILayer Source
registerAPILayer :: forall @api apiRow apiRL handlers handlerRL resolved ctx. ApiRecord api apiRow => RowToList apiRow apiRL => RowToList handlers handlerRL => ValidateAPIHandlers apiRL handlerRL handlers => NoExtraHandlers handlerRL apiRL apiRow => ResolveHandlers (fastify :: Fastify | ctx) handlers resolved => RegisterAPI resolved => Record handlers -> OmLayer (fastify :: Fastify | ctx) () (Record ())#RegisterAPI Source
class RegisterAPI :: Row Type -> Constraintclass RegisterAPI (handlers :: Row Type) where
Members
registerAPI :: Record handlers -> Fastify -> Effect Unit
Instances
(RowToList handlers rl, RegisterAPIRL rl handlers) => RegisterAPI handlers
#RegisterAPIRL Source
class RegisterAPIRL :: RowList Type -> Row Type -> Constraintclass RegisterAPIRL (rl :: RowList Type) (handlers :: Row Type) where
Members
Instances
RegisterAPIRL Nil handlers(IsSymbol label, Cons label (Handler route ctx) rest handlers, RegisterHandler (Handler route), RegisterAPIRL tail handlers) => RegisterAPIRL (Cons label (Handler route ctx) tail) handlers(IsSymbol label, Cons label handler rest handlers, RegisterHandler handler, RegisterAPIRL tail handlers) => RegisterAPIRL (Cons label handler tail) handlers
#RegisterHandler Source
class RegisterHandler handler whereMembers
registerHandler :: handler -> Fastify -> Effect Unit
Instances
(Union partialRequest o_ (body :: fullEncoding, cookies :: Record fullCookies, headers :: Record fullHeaders), DefaultRequestFields partialRequest fullHeaders fullCookies fullEncoding, RenderMethod method, PathPattern segments, SegmentPathParams segments pathParams, SegmentQueryParams segments queryParams, EncodingBody fullEncoding body, ParsePathParams pathParams, ParseQueryParamsFromObject queryParams, ParseHeaders fullHeaders, ParseBody fullEncoding body, ConvertResponseVariant userResp respVariant, HandleResponse respVariant, RouteHandler (Route method segments (Request (Record partialRequest)) userResp) pathParams queryParams fullHeaders body respVariant) => RegisterHandler (Handler (Route method segments (Request (Record partialRequest)) userResp))(RegisterHandler (Handler (Route method segments (Request (Record partialRequest)) userResp))) => RegisterHandler (Handler (Route method segments (Record partialRequest) userResp))
#ResolveHandlers Source
class ResolveHandlers :: Row Type -> Row Type -> Row Type -> Constraintclass ResolveHandlers (ctx :: Row Type) (handlers :: Row Type) (resolved :: Row Type) | ctx handlers -> resolved where
Members
resolveHandlers :: Record ctx -> Record handlers -> Record resolved
Instances
(RowToList handlers rl, ResolveHandlersRL rl ctx handlers resolved) => ResolveHandlers ctx handlers resolved
#ResolveHandlersRL Source
class ResolveHandlersRL :: RowList Type -> Row Type -> Row Type -> Row Type -> Constraintclass ResolveHandlersRL (rl :: RowList Type) (ctx :: Row Type) (handlers :: Row Type) (resolved :: Row Type) | rl handlers -> resolved where
Members
resolveHandlersRL :: Proxy rl -> Record ctx -> Record handlers -> Builder (Record ()) (Record resolved)
Instances
ResolveHandlersRL Nil ctx handlers ()(IsSymbol label, Cons label (Handler route handlerCtx) rest handlers, ResolveHandlerCtx label handlerCtx ctx, ResolveHandlersRL tail ctx handlers tailResolved, Cons label (Handler route) tailResolved resolved, Lacks label tailResolved) => ResolveHandlersRL (Cons label (Handler route handlerCtx) tail) ctx handlers resolved
#ResolveHandlerCtx Source
class ResolveHandlerCtx :: Symbol -> Row Type -> Row Type -> Constraintclass ResolveHandlerCtx (apiLabel :: Symbol) (handlerCtx :: Row Type) (ctx :: Row Type)
Instances
(RowToList handlerCtx handlerCtxRL, RowToList ctx ctxRL, ResolveHandlerCtxRL apiLabel handlerCtx handlerCtxRL ctx ctxRL) => ResolveHandlerCtx apiLabel handlerCtx ctx
#ResolveHandlerCtxRL Source
class ResolveHandlerCtxRL :: Symbol -> Row Type -> RowList Type -> Row Type -> RowList Type -> Constraintclass ResolveHandlerCtxRL (apiLabel :: Symbol) (handlerCtx :: Row Type) (required :: RowList Type) (ctx :: Row Type) (available :: RowList Type)
Instances
ResolveHandlerCtxRL apiLabel handlerCtx Nil ctx available(CheckHandlerDependency apiLabel label ty available handlerCtx ctx, ResolveHandlerCtxRL apiLabel handlerCtx tail ctx available) => ResolveHandlerCtxRL apiLabel handlerCtx (Cons label ty tail) ctx available
#CheckHandlerDependency Source
class CheckHandlerDependency :: Symbol -> Symbol -> Type -> RowList Type -> Row Type -> Row Type -> Constraintclass CheckHandlerDependency (apiLabel :: Symbol) (label :: Symbol) (ty :: Type) (available :: RowList Type) (handlerCtx :: Row Type) (ctx :: Row Type)
Instances
CheckHandlerDependency apiLabel label ty (Cons label ty tail) handlerCtx ctx(IsSymbol apiLabel, IsSymbol label, Fail (APPLY (Above (Text "registerAPILayer dependency type mismatch.")) (APPLY (Above (Beside (Text "Handler: ") (Quote apiLabel))) (APPLY (Above (Beside (Text "Dependency: ") (Quote label))) (APPLY (Above (Beside (Text "Expected: ") (Quote ty))) (APPLY (Above (Beside (Text "Actual: ") (Quote actualTy))) (Above (Beside (Text "Handler context: ") (Quote handlerCtx)) (Beside (Text "Layer context: ") (Quote ctx))))))))) => CheckHandlerDependency apiLabel label ty (Cons label actualTy tail) handlerCtx ctx(CheckHandlerDependency apiLabel label ty tail handlerCtx ctx) => CheckHandlerDependency apiLabel label ty (Cons otherLabel otherTy tail) handlerCtx ctx(IsSymbol apiLabel, IsSymbol label, Fail (APPLY (Above (Text "registerAPILayer is missing a required dependency.")) (APPLY (Above (Beside (Text "Handler: ") (Quote apiLabel))) (APPLY (Above (Beside (Text "Missing dependency: ") (Quote label))) (APPLY (Above (Beside (Text "Expected type: ") (Quote ty))) (Above (Beside (Text "Handler context: ") (Quote handlerCtx)) (Beside (Text "Layer context: ") (Quote ctx)))))))) => CheckHandlerDependency apiLabel label ty Nil handlerCtx ctx
#ValidateAPIHandlers Source
class ValidateAPIHandlers :: RowList Type -> RowList Type -> Row Type -> Constraintclass ValidateAPIHandlers (apiRL :: RowList Type) (handlerRL :: RowList Type) (handlers :: Row Type)
Instances
ValidateAPIHandlers Nil handlerRL handlers(CheckAPIHandler label route handlerRL, ValidateAPIHandlers tail handlerRL handlers) => ValidateAPIHandlers (Cons label route tail) handlerRL handlers
#CheckAPIHandler Source
class CheckAPIHandler :: Symbol -> Type -> RowList Type -> Constraintclass CheckAPIHandler (label :: Symbol) (route :: Type) (handlerRL :: RowList Type)
Instances
CheckAPIHandler label route (Cons label (Handler route handlerCtx) tail)(IsSymbol label, Fail (APPLY (Above (Text "registerAPILayer handler route mismatch.")) (APPLY (Above (Beside (Text "Handler field: ") (Quote label))) (Above (Beside (Text "Expected route: ") (Quote route)) (Beside (Text "Actual handler type: ") (Quote handler)))))) => CheckAPIHandler label route (Cons label handler tail)(CheckAPIHandler label route tail) => CheckAPIHandler label route (Cons otherLabel handler tail)(IsSymbol label, Fail (APPLY (Above (Text "registerAPILayer is missing a handler.")) (Above (Beside (Text "Missing field: ") (Quote label)) (Beside (Text "Expected route: ") (Quote route))))) => CheckAPIHandler label route Nil
#NoExtraHandlers Source
class NoExtraHandlers :: RowList Type -> RowList Type -> Row Type -> Constraintclass NoExtraHandlers (handlerRL :: RowList Type) (apiRL :: RowList Type) (apiRow :: Row Type)
Instances
NoExtraHandlers Nil apiRL apiRow(CheckAPIFieldExists label apiRL apiRow, NoExtraHandlers tail apiRL apiRow) => NoExtraHandlers (Cons label handler tail) apiRL apiRow
#CheckAPIFieldExists Source
class CheckAPIFieldExists :: Symbol -> RowList Type -> Row Type -> Constraintclass CheckAPIFieldExists (label :: Symbol) (apiRL :: RowList Type) (apiRow :: Row Type)
Instances
CheckAPIFieldExists label (Cons label route tail) apiRow(CheckAPIFieldExists label tail apiRow) => CheckAPIFieldExists label (Cons otherLabel route tail) apiRow(IsSymbol label, Fail (APPLY (Above (Text "registerAPILayer received an extra handler.")) (Above (Beside (Text "Extra field: ") (Quote label)) (Beside (Text "API shape: ") (Quote apiRow))))) => CheckAPIFieldExists label Nil apiRow
#APIHandlers Source
class APIHandlers :: RowList Type -> Row Type -> Constraintclass APIHandlers (rl :: RowList Type) (handlers :: Row Type) | rl -> handlers
Instances
APIHandlers Nil ()(APIHandlers tail tailHandlers, Cons label (Handler route handlerCtx) tailHandlers handlers, Lacks label tailHandlers) => APIHandlers (Cons label route tail) handlers