Module
Yoga.Fastify.Om.API
- Package
- purescript-yoga-fastify-om
- Repository
- rowtype-yoga/purescript-yoga-fastify-om
#registerAPI Source
registerAPI :: forall @api apiRow apiRL handlers handlerRL. ApiRecord api apiRow => RowToList apiRow apiRL => RowToList handlers handlerRL => ValidateAPIHandlers apiRL handlerRL handlers => NoExtraHandlers handlerRL apiRL apiRow => RegisterAPI handlers => Record handlers -> Fastify -> Effect Unit#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
registerAPIImpl :: 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, AssertEmptyCtx label ctx, 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, ParseCookies fullCookies, 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 "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 "Missing 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 "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 "Missing 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 "Extra handler not in API.")) (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
#AssertEmptyCtx Source
class AssertEmptyCtx :: Symbol -> Row Type -> Constraintclass AssertEmptyCtx (label :: Symbol) (ctx :: Row Type)
Assert that a handler's dependency context is empty.
Instances
(IsEmptyRow ctx empty, AssertEmptyCtxBool empty label ctx) => AssertEmptyCtx label ctx
#AssertEmptyCtxBool Source
class AssertEmptyCtxBool :: Boolean -> Symbol -> Row Type -> Constraintclass AssertEmptyCtxBool (empty :: Boolean) (label :: Symbol) (ctx :: Row Type)
Assert based on Boolean result
Instances
AssertEmptyCtxBool True label ctx(IsSymbol label, Fail (APPLY (Above (Text "registerAPI handler has dependencies that cannot be provided.")) (APPLY (Above (Beside (Text "Handler: ") (Quote label))) (Above (Beside (Text "Dependencies: ") (Quote ctx)) (Text "Use registerAPILayer for handlers with dependencies."))))) => AssertEmptyCtxBool False label ctx
#IsEmptyRow Source
class IsEmptyRow :: Row Type -> Boolean -> Constraintclass IsEmptyRow (ctx :: Row Type) (empty :: Boolean) | ctx -> empty
Check if a row is empty
Instances
(RowToList ctx rl, IsNilRL rl empty) => IsEmptyRow ctx empty