webgear-server-1.2.0: Composable, type-safe library to build HTTP API servers
Safe HaskellSafe-Inferred
LanguageHaskell2010

WebGear.Server.Handler

Description

Server implementation of WebGear handlers

Synopsis

Documentation

newtype ServerHandler m 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 :: forall (a :: k). ServerHandler m a a #

(.) :: forall (b :: k) (c :: k) (a :: k). 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 Request Source # 
Instance details

Defined in WebGear.Server.Trait.Method

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

Defined in WebGear.Server.Trait.Path

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

Defined in WebGear.Server.Trait.Path

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

Defined in WebGear.Server.Trait.Body

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

Defined in WebGear.Server.Trait.Status

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

Defined in WebGear.Server.Trait.Body

Methods

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

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

Defined in WebGear.Server.Trait.Path

Methods

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

(Monad m, BodyRender m mt val) => Set (ServerHandler m) (Body mt val) Response 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) Response 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) Response 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) Request Source # 
Instance details

Defined in WebGear.Server.Trait.Cookie

Methods

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

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

Defined in WebGear.Server.Trait.Cookie

Methods

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

(Monad m, KnownSymbol name, ToHttpApiData val) => Set (ServerHandler m) (ResponseHeader 'Optional name val) Response 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) Response 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) Request Source # 
Instance details

Defined in WebGear.Server.Trait.Header

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

Defined in WebGear.Server.Trait.Header

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

Defined in WebGear.Server.Trait.Header

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

Defined in WebGear.Server.Trait.Header

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

Defined in WebGear.Server.Trait.QueryParam

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

Defined in WebGear.Server.Trait.QueryParam

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

Defined in WebGear.Server.Trait.QueryParam

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

Defined in WebGear.Server.Trait.QueryParam

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

Defined in WebGear.Server.Trait.Auth.Basic

Methods

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

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

Defined in WebGear.Server.Trait.Auth.Basic

Methods

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

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

Defined in WebGear.Server.Trait.Auth.JWT

Methods

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

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

Defined in WebGear.Server.Trait.Auth.JWT

Methods

getTrait :: forall (ts :: [Type]). Prerequisite (JWTAuth' 'Required scheme m e a) ts Request => JWTAuth' 'Required scheme m e a -> ServerHandler m (With Request ts) (Either (Absence (JWTAuth' 'Required scheme m e a) Request) (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 #

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 (Request `With` '[]) 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