webgear-server-1.5.0: Composable, type-safe library to build HTTP API servers
Safe HaskellNone
LanguageHaskell2010

WebGear.Server.Handler

Description

Server implementation of WebGear handlers

Synopsis

Documentation

newtype ServerHandler (m :: Type -> Type) a b Source #

An arrow implementing a WebGear server.

A good first approximation is to consider ServerHandler to be equivalent to the function arrow a -> m b where m is a monad. It also supports routing and possibly failing the computation when the route does not match.

Instances

Instances details
Monad m => ArrowError RouteMismatch (ServerHandler m) Source # 
Instance details

Defined in WebGear.Server.Handler

Monad m => Category (ServerHandler m :: Type -> Type -> Type) Source # 
Instance details

Defined in WebGear.Server.Handler

Methods

id :: ServerHandler m a a #

(.) :: ServerHandler m b c -> ServerHandler m a b -> ServerHandler m a c #

Monad m => Arrow (ServerHandler m) Source # 
Instance details

Defined in WebGear.Server.Handler

Methods

arr :: (b -> c) -> ServerHandler m b c #

first :: ServerHandler m b c -> ServerHandler m (b, d) (c, d) #

second :: ServerHandler m b c -> ServerHandler m (d, b) (d, c) #

(***) :: ServerHandler m b c -> ServerHandler m b' c' -> ServerHandler m (b, b') (c, c') #

(&&&) :: ServerHandler m b c -> ServerHandler m b c' -> ServerHandler m b (c, c') #

Monad m => ArrowChoice (ServerHandler m) Source # 
Instance details

Defined in WebGear.Server.Handler

Methods

left :: ServerHandler m b c -> ServerHandler m (Either b d) (Either c d) #

right :: ServerHandler m b c -> ServerHandler m (Either d b) (Either d c) #

(+++) :: ServerHandler m b c -> ServerHandler m b' c' -> ServerHandler m (Either b b') (Either c c') #

(|||) :: ServerHandler m b d -> ServerHandler m c d -> ServerHandler m (Either b c) d #

Monad m => ArrowPlus (ServerHandler m) Source # 
Instance details

Defined in WebGear.Server.Handler

Methods

(<+>) :: ServerHandler m b c -> ServerHandler m b c -> ServerHandler m b c #

Monad m => ArrowZero (ServerHandler m) Source # 
Instance details

Defined in WebGear.Server.Handler

Methods

zeroArrow :: ServerHandler m b c #

Monad m => Handler (ServerHandler m) m Source # 
Instance details

Defined in WebGear.Server.Handler

Monad m => Get (ServerHandler m) Method Source # 
Instance details

Defined in WebGear.Server.Trait.Method

Monad m => Get (ServerHandler m) Path Source # 
Instance details

Defined in WebGear.Server.Trait.Path

Methods

getTrait :: forall (ts :: [Type]). Prerequisite Path ts => Path -> ServerHandler m (With Request ts) (Either (Absence Path) (Attribute Path Request)) #

Monad m => Get (ServerHandler m) PathEnd Source # 
Instance details

Defined in WebGear.Server.Trait.Path

Monad m => Set (ServerHandler m) UnknownContentBody Source # 
Instance details

Defined in WebGear.Server.Trait.Body

Monad m => Set (ServerHandler m) Status Source # 
Instance details

Defined in WebGear.Server.Trait.Status

(Monad m, BodyUnrender m mt val) => Get (ServerHandler m) (Body mt val) Source # 
Instance details

Defined in WebGear.Server.Trait.Body

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (Body mt val) ts => Body mt val -> ServerHandler m (With Request ts) (Either (Absence (Body mt val)) (Attribute (Body mt val) Request)) #

(Monad m, FromHttpApiData val) => Get (ServerHandler m) (PathVar tag val) Source # 
Instance details

Defined in WebGear.Server.Trait.Path

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (PathVar tag val) ts => PathVar tag val -> ServerHandler m (With Request ts) (Either (Absence (PathVar tag val)) (Attribute (PathVar tag val) Request)) #

(Monad m, BodyRender m mt val) => Set (ServerHandler m) (Body mt val) Source # 
Instance details

Defined in WebGear.Server.Trait.Body

Methods

setTrait :: forall (ts :: [Type]). Body mt val -> (With Response ts -> Response -> Attribute (Body mt val) Response -> With Response (Body mt val ': ts)) -> ServerHandler m (With Response ts, Attribute (Body mt val) Response) (With Response (Body mt val ': ts)) #

(Monad m, KnownSymbol name) => Set (ServerHandler m) (SetCookie 'Optional name) Source # 
Instance details

Defined in WebGear.Server.Trait.Cookie

Methods

setTrait :: forall (ts :: [Type]). SetCookie 'Optional name -> (With Response ts -> Response -> Attribute (SetCookie 'Optional name) Response -> With Response (SetCookie 'Optional name ': ts)) -> ServerHandler m (With Response ts, Attribute (SetCookie 'Optional name) Response) (With Response (SetCookie 'Optional name ': ts)) #

(Monad m, KnownSymbol name) => Set (ServerHandler m) (SetCookie 'Required name) Source # 
Instance details

Defined in WebGear.Server.Trait.Cookie

Methods

setTrait :: forall (ts :: [Type]). SetCookie 'Required name -> (With Response ts -> Response -> Attribute (SetCookie 'Required name) Response -> With Response (SetCookie 'Required name ': ts)) -> ServerHandler m (With Response ts, Attribute (SetCookie 'Required name) Response) (With Response (SetCookie 'Required name ': ts)) #

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (Cookie 'Optional name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Cookie

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (Cookie 'Optional name val) ts => Cookie 'Optional name val -> ServerHandler m (With Request ts) (Either (Absence (Cookie 'Optional name val)) (Attribute (Cookie 'Optional name val) Request)) #

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (Cookie 'Required name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Cookie

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (Cookie 'Required name val) ts => Cookie 'Required name val -> ServerHandler m (With Request ts) (Either (Absence (Cookie 'Required name val)) (Attribute (Cookie 'Required name val) Request)) #

(Monad m, KnownSymbol name, ToHttpApiData val) => Set (ServerHandler m) (ResponseHeader 'Optional name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Header

Methods

setTrait :: forall (ts :: [Type]). ResponseHeader 'Optional name val -> (With Response ts -> Response -> Attribute (ResponseHeader 'Optional name val) Response -> With Response (ResponseHeader 'Optional name val ': ts)) -> ServerHandler m (With Response ts, Attribute (ResponseHeader 'Optional name val) Response) (With Response (ResponseHeader 'Optional name val ': ts)) #

(Monad m, KnownSymbol name, ToHttpApiData val) => Set (ServerHandler m) (ResponseHeader 'Required name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Header

Methods

setTrait :: forall (ts :: [Type]). ResponseHeader 'Required name val -> (With Response ts -> Response -> Attribute (ResponseHeader 'Required name val) Response -> With Response (ResponseHeader 'Required name val ': ts)) -> ServerHandler m (With Response ts, Attribute (ResponseHeader 'Required name val) Response) (With Response (ResponseHeader 'Required name val ': ts)) #

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (RequestHeader 'Optional 'Lenient name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Header

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (RequestHeader 'Optional 'Strict name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Header

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (RequestHeader 'Required 'Lenient name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Header

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (RequestHeader 'Required 'Strict name val) Source # 
Instance details

Defined in WebGear.Server.Trait.Header

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (QueryParam 'Optional 'Lenient name val) Source # 
Instance details

Defined in WebGear.Server.Trait.QueryParam

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (QueryParam 'Optional 'Lenient name val) ts => QueryParam 'Optional 'Lenient name val -> ServerHandler m (With Request ts) (Either (Absence (QueryParam 'Optional 'Lenient name val)) (Attribute (QueryParam 'Optional 'Lenient name val) Request)) #

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (QueryParam 'Optional 'Strict name val) Source # 
Instance details

Defined in WebGear.Server.Trait.QueryParam

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (QueryParam 'Optional 'Strict name val) ts => QueryParam 'Optional 'Strict name val -> ServerHandler m (With Request ts) (Either (Absence (QueryParam 'Optional 'Strict name val)) (Attribute (QueryParam 'Optional 'Strict name val) Request)) #

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (QueryParam 'Required 'Lenient name val) Source # 
Instance details

Defined in WebGear.Server.Trait.QueryParam

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (QueryParam 'Required 'Lenient name val) ts => QueryParam 'Required 'Lenient name val -> ServerHandler m (With Request ts) (Either (Absence (QueryParam 'Required 'Lenient name val)) (Attribute (QueryParam 'Required 'Lenient name val) Request)) #

(Monad m, KnownSymbol name, FromHttpApiData val) => Get (ServerHandler m) (QueryParam 'Required 'Strict name val) Source # 
Instance details

Defined in WebGear.Server.Trait.QueryParam

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (QueryParam 'Required 'Strict name val) ts => QueryParam 'Required 'Strict name val -> ServerHandler m (With Request ts) (Either (Absence (QueryParam 'Required 'Strict name val)) (Attribute (QueryParam 'Required 'Strict name val) Request)) #

Monad m => Get (ServerHandler m) (BasicAuth' 'Optional scheme m e a) Source # 
Instance details

Defined in WebGear.Server.Trait.Auth.Basic

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (BasicAuth' 'Optional scheme m e a) ts => BasicAuth' 'Optional scheme m e a -> ServerHandler m (With Request ts) (Either (Absence (BasicAuth' 'Optional scheme m e a)) (Attribute (BasicAuth' 'Optional scheme m e a) Request)) #

Monad m => Get (ServerHandler m) (BasicAuth' 'Required scheme m e a) Source # 
Instance details

Defined in WebGear.Server.Trait.Auth.Basic

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (BasicAuth' 'Required scheme m e a) ts => BasicAuth' 'Required scheme m e a -> ServerHandler m (With Request ts) (Either (Absence (BasicAuth' 'Required scheme m e a)) (Attribute (BasicAuth' 'Required scheme m e a) Request)) #

(MonadTime m, Get (ServerHandler m) (AuthorizationHeader scheme)) => Get (ServerHandler m) (JWTAuth' 'Optional scheme m e a) Source # 
Instance details

Defined in WebGear.Server.Trait.Auth.JWT

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (JWTAuth' 'Optional scheme m e a) ts => JWTAuth' 'Optional scheme m e a -> ServerHandler m (With Request ts) (Either (Absence (JWTAuth' 'Optional scheme m e a)) (Attribute (JWTAuth' 'Optional scheme m e a) Request)) #

(MonadTime m, Get (ServerHandler m) (AuthorizationHeader scheme)) => Get (ServerHandler m) (JWTAuth' 'Required scheme m e a) Source # 
Instance details

Defined in WebGear.Server.Trait.Auth.JWT

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (JWTAuth' 'Required scheme m e a) ts => JWTAuth' 'Required scheme m e a -> ServerHandler m (With Request ts) (Either (Absence (JWTAuth' 'Required scheme m e a)) (Attribute (JWTAuth' 'Required scheme m e a) Request)) #

newtype RoutePath #

Parts of the request path used by the routing machinery

Constructors

RoutePath [Text] 

Instances

Instances details
IsList RoutePath 
Instance details

Defined in WebGear.Core.Handler

Associated Types

type Item RoutePath 
Instance details

Defined in WebGear.Core.Handler

Show RoutePath 
Instance details

Defined in WebGear.Core.Handler

Eq RoutePath 
Instance details

Defined in WebGear.Core.Handler

type Item RoutePath 
Instance details

Defined in WebGear.Core.Handler

runServerHandler Source #

Arguments

:: Monad m 
=> ServerHandler m a b

The handler to run

-> RoutePath

Path used for routing

-> a

Input value to the arrow

-> m (Either RouteMismatch b)

The result of the arrow

Run a ServerHandler to produce a result or a route mismatch error.

toApplication :: ServerHandler IO (With Request ('[] :: [Type])) Response -> Application Source #

Convert a ServerHandler to a WAI application

transform :: (forall x. m x -> n x) -> ServerHandler m a b -> ServerHandler n a b Source #

Transform a ServerHandler running in one monad to another monad.

This is useful in cases where the server is running in a custom monad but you would like to convert it to a WAI application using toApplication.

Example usage with a ReaderT monad stack:

 toApplication (transform f server)
   where
     server :: ServerHandler (ReaderT r IO) (Request `With` '[]) Response
     server = ....

     f :: ReaderT r IO a -> IO a
     f action = runReaderT action r