1 | module Pact.Server.Core
4 | import Pact.WAI.HTTPErr
9 | import Control.Monad.Either
10 | import Control.Monad.Reader
14 | Handler : Type -> Type
15 | Handler = EitherT HTTPErr IO
19 | interface Hoistable (m : Type -> Type) where
20 | hoist : m a -> Handler a
24 | implementation Hoistable IO where
28 | implementation Hoistable Handler where
34 | record RouteItem (m : Type -> Type) where
39 | routeHandler : GetHandlerType m routeApi
40 | { auto mimeRenderProof : MimeRender (VerbAccept routeApi.verb) (VerbResponse routeApi.verb) }
41 | { auto reqBodyProof : FromJSON (ApiReqBody routeApi)}
45 | GetEndpointTypeFromRouteItem : (m : Type -> Type) -> RouteItem m -> Type
46 | GetEndpointTypeFromRouteItem m (api :=> handler) = GetEPFromAPI m api
51 | data Router: (m : Type -> Type) -> Type where
53 | MkRouter : Hoistable m => (routes : List (RouteItem m)) -> Router m
61 | record ServerConfig where
62 | constructor MkServerConfig
74 | defaultConfig : ServerConfig
75 | defaultConfig = MkServerConfig {
76 | bind = IP4 [127,0,0,1] 2222,