webgear-server-0.2.0: Composable, type-safe library to build HTTP API servers

Copyright(c) Raghu Kaippully 2020
LicenseMPL-2.0
Maintainerrkaippully@gmail.com
Safe HaskellNone
LanguageHaskell2010

WebGear.Types

Contents

Description

Common types and functions used throughout WebGear.

Synopsis

WebGear Request

data Request #

Information on the request sent by the client. This abstracts away the details of the underlying implementation.

Instances
Show Request 
Instance details

Defined in Network.Wai.Internal

MonadState PathInfo m => Trait PathEnd Request m Source # 
Instance details

Defined in WebGear.Middlewares.Path

Monad m => Trait BasicAuth Request m Source # 
Instance details

Defined in WebGear.Middlewares.Auth.Basic

(IsStdMethod t, Monad m) => Trait (Method t :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Method

Associated Types

type Attribute (Method t) Request :: Type Source #

type Absence (Method t) Request :: Type Source #

(KnownSymbol s, MonadState PathInfo m) => Trait (Path s :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Path

Associated Types

type Attribute (Path s) Request :: Type Source #

type Absence (Path s) Request :: Type Source #

(FromJSON t, MonadIO m) => Trait (JSONRequestBody t :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Body

(KnownSymbol name, KnownSymbol val, Monad m) => Trait (HeaderMatch' Required name val :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (HeaderMatch' Required name val) Request :: Type Source #

type Absence (HeaderMatch' Required name val) Request :: Type Source #

(KnownSymbol name, KnownSymbol val, Monad m) => Trait (HeaderMatch' Optional name val :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (HeaderMatch' Optional name val) Request :: Type Source #

type Absence (HeaderMatch' Optional name val) Request :: Type Source #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Required Strict name val :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Required Strict name val) Request :: Type Source #

type Absence (Header' Required Strict name val) Request :: Type Source #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Required Lenient name val :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Required Lenient name val) Request :: Type Source #

type Absence (Header' Required Lenient name val) Request :: Type Source #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Optional Strict name val :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Optional Strict name val) Request :: Type Source #

type Absence (Header' Optional Strict name val) Request :: Type Source #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Optional Lenient name val :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Optional Lenient name val) Request :: Type Source #

type Absence (Header' Optional Lenient name val) Request :: Type Source #

(FromHttpApiData val, MonadState PathInfo m) => Trait (PathVar tag val :: Type) Request m Source # 
Instance details

Defined in WebGear.Middlewares.Path

Associated Types

type Attribute (PathVar tag val) Request :: Type Source #

type Absence (PathVar tag val) Request :: Type Source #

Methods

toAttribute :: Request -> m (Result (PathVar tag val) Request) Source #

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

Defined in WebGear.Middlewares.Params

Associated Types

type Attribute (QueryParam' Required Strict name val) Request :: Type Source #

type Absence (QueryParam' Required Strict name val) Request :: Type Source #

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

Defined in WebGear.Middlewares.Params

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

Defined in WebGear.Middlewares.Params

Associated Types

type Attribute (QueryParam' Optional Strict name val) Request :: Type Source #

type Absence (QueryParam' Optional Strict name val) Request :: Type Source #

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

Defined in WebGear.Middlewares.Params

type Attribute PathEnd Request Source # 
Instance details

Defined in WebGear.Middlewares.Path

type Attribute BasicAuth Request Source # 
Instance details

Defined in WebGear.Middlewares.Auth.Basic

type Absence PathEnd Request Source # 
Instance details

Defined in WebGear.Middlewares.Path

type Absence BasicAuth Request Source # 
Instance details

Defined in WebGear.Middlewares.Auth.Basic

type Attribute (Method t :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Method

type Attribute (Method t :: Type) Request = ()
type Attribute (Path s :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Path

type Attribute (Path s :: Type) Request = ()
type Attribute (JSONRequestBody t :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Body

type Absence (Method t :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Method

type Absence (Path s :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Path

type Absence (Path s :: Type) Request = ()
type Absence (JSONRequestBody t :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Body

type Attribute (HeaderMatch' Required name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (HeaderMatch' Required name val :: Type) Request = ()
type Attribute (HeaderMatch' Optional name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (HeaderMatch' Required name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (HeaderMatch' Optional name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Required Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Required Strict name val :: Type) Request = val
type Attribute (Header' Required Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Optional Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Optional Strict name val :: Type) Request = Maybe val
type Attribute (Header' Optional Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (PathVar tag val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Path

type Attribute (PathVar tag val :: Type) Request = val
type Absence (Header' Required Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (Header' Required Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (Header' Optional Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (Header' Optional Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (PathVar tag val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Path

type Attribute (QueryParam' Required Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

type Attribute (QueryParam' Required Strict name val :: Type) Request = val
type Attribute (QueryParam' Required Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

type Attribute (QueryParam' Optional Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

type Attribute (QueryParam' Optional Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

type Absence (QueryParam' Required Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

type Absence (QueryParam' Required Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

type Absence (QueryParam' Optional Strict name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

type Absence (QueryParam' Optional Lenient name val :: Type) Request Source # 
Instance details

Defined in WebGear.Middlewares.Params

remoteHost :: Request -> SockAddr #

The client's host information.

httpVersion :: Request -> HttpVersion #

HTTP version such as 1.1.

isSecure :: Request -> Bool #

Was this request made over an SSL connection?

Note that this value will not tell you if the client originally made this request over SSL, but rather whether the current connection is SSL. The distinction lies with reverse proxies. In many cases, the client will connect to a load balancer over SSL, but connect to the WAI handler without SSL. In such a case, isSecure will be False, but from a user perspective, there is a secure connection.

requestMethod :: Request -> Method #

Request method such as GET.

pathInfo :: Request -> [Text] #

Path info in individual pieces - the URL without a hostname/port and without a query string, split on forward slashes.

queryString :: Request -> Query #

Parsed query string information.

requestHeader :: HeaderName -> Request -> Maybe ByteString Source #

Get the value of a request header

requestHeaders :: Request -> RequestHeaders #

A list of headers (a pair of key and value) in an HTTP request.

requestBodyLength :: Request -> RequestBodyLength #

The size of the request body. In the case of a chunked request body, this may be unknown.

Since 1.4.0

getRequestBodyChunk :: Request -> IO ByteString #

Get the next chunk of the body. Returns empty when the body is fully consumed.

Since: wai-3.2.2

WebGear Response

data Response a Source #

An HTTP response sent from the server to the client.

The response contains a status, optional headers and an optional body of type a.

Constructors

Response 

Fields

Instances
Functor Response Source # 
Instance details

Defined in WebGear.Types

Methods

fmap :: (a -> b) -> Response a -> Response b #

(<$) :: a -> Response b -> Response a #

Eq a => Eq (Response a) Source # 
Instance details

Defined in WebGear.Types

Methods

(==) :: Response a -> Response a -> Bool #

(/=) :: Response a -> Response a -> Bool #

Ord a => Ord (Response a) Source # 
Instance details

Defined in WebGear.Types

Methods

compare :: Response a -> Response a -> Ordering #

(<) :: Response a -> Response a -> Bool #

(<=) :: Response a -> Response a -> Bool #

(>) :: Response a -> Response a -> Bool #

(>=) :: Response a -> Response a -> Bool #

max :: Response a -> Response a -> Response a #

min :: Response a -> Response a -> Response a #

Show a => Show (Response a) Source # 
Instance details

Defined in WebGear.Types

Methods

showsPrec :: Int -> Response a -> ShowS #

show :: Response a -> String #

showList :: [Response a] -> ShowS #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Required Strict name val :: Type) (Response a) m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Required Strict name val) (Response a) :: Type Source #

type Absence (Header' Required Strict name val) (Response a) :: Type Source #

Methods

toAttribute :: Response a -> m (Result (Header' Required Strict name val) (Response a)) Source #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Required Lenient name val :: Type) (Response a) m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Required Lenient name val) (Response a) :: Type Source #

type Absence (Header' Required Lenient name val) (Response a) :: Type Source #

Methods

toAttribute :: Response a -> m (Result (Header' Required Lenient name val) (Response a)) Source #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Optional Strict name val :: Type) (Response a) m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Optional Strict name val) (Response a) :: Type Source #

type Absence (Header' Optional Strict name val) (Response a) :: Type Source #

Methods

toAttribute :: Response a -> m (Result (Header' Optional Strict name val) (Response a)) Source #

(KnownSymbol name, FromHttpApiData val, Monad m) => Trait (Header' Optional Lenient name val :: Type) (Response a) m Source # 
Instance details

Defined in WebGear.Middlewares.Header

Associated Types

type Attribute (Header' Optional Lenient name val) (Response a) :: Type Source #

type Absence (Header' Optional Lenient name val) (Response a) :: Type Source #

Methods

toAttribute :: Response a -> m (Result (Header' Optional Lenient name val) (Response a)) Source #

type Attribute (Header' Required Strict name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Required Strict name val :: Type) (Response a) = val
type Attribute (Header' Required Lenient name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Required Lenient name val :: Type) (Response a) = Either Text val
type Attribute (Header' Optional Strict name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Optional Strict name val :: Type) (Response a) = Maybe val
type Attribute (Header' Optional Lenient name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Attribute (Header' Optional Lenient name val :: Type) (Response a) = Maybe (Either Text val)
type Absence (Header' Required Strict name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (Header' Required Lenient name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (Header' Optional Strict name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (Header' Optional Lenient name val :: Type) (Response a) Source # 
Instance details

Defined in WebGear.Middlewares.Header

type Absence (Header' Optional Lenient name val :: Type) (Response a) = ()

responseHeader :: HeaderName -> Response a -> Maybe ByteString Source #

Looks up a response header

setResponseHeader :: HeaderName -> ByteString -> Response a -> Response a Source #

Set a response header value

waiResponse :: Response ByteString -> Response Source #

Convert a WebGear response to a WAI Response.

Creating responses

respond :: Status -> Maybe a -> Response a Source #

Create a response with a given status and body

continue100 :: Response a Source #

Continue 100 response

switchingProtocols101 :: Response a Source #

Switching Protocols 101 response

ok200 :: a -> Response a Source #

OK 200 response

created201 :: a -> Response a Source #

Created 201 response

accepted202 :: a -> Response a Source #

Accepted 202 response

nonAuthoritative203 :: a -> Response a Source #

Non-Authoritative 203 response

noContent204 :: Response a Source #

No Content 204 response

resetContent205 :: Response a Source #

Reset Content 205 response

partialContent206 :: a -> Response a Source #

Partial Content 206 response

multipleChoices300 :: a -> Response a Source #

Multiple Choices 300 response

movedPermanently301 :: a -> Response a Source #

Moved Permanently 301 response

found302 :: a -> Response a Source #

Found 302 response

seeOther303 :: a -> Response a Source #

See Other 303 response

notModified304 :: Response a Source #

Not Modified 304 response

temporaryRedirect307 :: a -> Response a Source #

Temporary Redirect 307 response

permanentRedirect308 :: a -> Response a Source #

Permanent Redirect 308 response

badRequest400 :: a -> Response a Source #

Bad Request 400 response

unauthorized401 :: a -> Response a Source #

Unauthorized 401 response

paymentRequired402 :: a -> Response a Source #

Payment Required 402 response

forbidden403 :: a -> Response a Source #

Forbidden 403 response

notFound404 :: Response a Source #

Not Found 404 response

methodNotAllowed405 :: a -> Response a Source #

Method Not Allowed 405 response

notAcceptable406 :: a -> Response a Source #

Not Acceptable 406 response

proxyAuthenticationRequired407 :: a -> Response a Source #

Proxy Authentication Required 407 response

requestTimeout408 :: a -> Response a Source #

Request Timeout 408 response

conflict409 :: a -> Response a Source #

Conflict 409 response

gone410 :: a -> Response a Source #

Gone 410 response

lengthRequired411 :: a -> Response a Source #

Length Required 411 response

preconditionFailed412 :: a -> Response a Source #

Precondition Failed 412 response

requestEntityTooLarge413 :: a -> Response a Source #

Request Entity Too Large 413 response

requestURITooLong414 :: a -> Response a Source #

Request URI Too Long 414 response

unsupportedMediaType415 :: a -> Response a Source #

Unsupported Media Type 415 response

requestedRangeNotSatisfiable416 :: a -> Response a Source #

Requested Range Not Satisfiable 416 response

expectationFailed417 :: a -> Response a Source #

Expectation Failed 417 response

imATeapot418 :: a -> Response a Source #

I'm A Teapot 418 response

unprocessableEntity422 :: a -> Response a Source #

Unprocessable Entity 422 response

preconditionRequired428 :: a -> Response a Source #

Precondition Required 428 response

tooManyRequests429 :: a -> Response a Source #

Too Many Requests 429 response

requestHeaderFieldsTooLarge431 :: a -> Response a Source #

Request Header Fields Too Large 431 response

internalServerError500 :: a -> Response a Source #

Internal Server Error 500 response

notImplemented501 :: a -> Response a Source #

Not Implemented 501 response

badGateway502 :: a -> Response a Source #

Bad Gateway 502 response

serviceUnavailable503 :: a -> Response a Source #

Service Unavailable 503 response

gatewayTimeout504 :: a -> Response a Source #

Gateway Timeout 504 response

httpVersionNotSupported505 :: a -> Response a Source #

HTTP Version Not Supported 505 response

networkAuthenticationRequired511 :: a -> Response a Source #

Network Authentication Required 511 response

type Handler' m req a = Kleisli m (Linked req Request) (Response a) Source #

A handler is a function from a request to response in a monadic context. Both the request and the response can have linked traits.

The type level list req contains all the traits expected to be present in the request.

type Handler req a = Handler' Router req a Source #

A handler that runs on the Router monad.

type Middleware' m req req' a' a = Handler' m req' a' -> Handler' m req a Source #

A middleware takes a handler as input and produces another handler that usually adds some functionality.

A middleware can do a number of things with the request handling such as:

  • Change the request traits before invoking the handler.
  • Use the linked value of any of the request traits.
  • Change the response body.

type Middleware req req' a' a = Middleware' Router req req' a' a Source #

A middleware that runs on the Router monad.

type RequestMiddleware' m req req' a = Middleware' m req req' a a Source #

A middleware that manipulates only the request traits and passes the response through.

type RequestMiddleware req req' a = RequestMiddleware' Router req req' a Source #

A request middleware that runs on the Router monad.

type ResponseMiddleware' m req a' a = Middleware' m req req a' a Source #

A middleware that manipulates only the response and passes the request through.

type ResponseMiddleware req a' a = ResponseMiddleware' Router req a' a Source #

A response middleware that runs on the Router monad.

newtype Router a Source #

The monad for routing.

Constructors

Router 
Instances
Monad Router Source # 
Instance details

Defined in WebGear.Types

Methods

(>>=) :: Router a -> (a -> Router b) -> Router b #

(>>) :: Router a -> Router b -> Router b #

return :: a -> Router a #

fail :: String -> Router a #

Functor Router Source # 
Instance details

Defined in WebGear.Types

Methods

fmap :: (a -> b) -> Router a -> Router b #

(<$) :: a -> Router b -> Router a #

Applicative Router Source # 
Instance details

Defined in WebGear.Types

Methods

pure :: a -> Router a #

(<*>) :: Router (a -> b) -> Router a -> Router b #

liftA2 :: (a -> b -> c) -> Router a -> Router b -> Router c #

(*>) :: Router a -> Router b -> Router b #

(<*) :: Router a -> Router b -> Router a #

Alternative Router Source # 
Instance details

Defined in WebGear.Types

Methods

empty :: Router a #

(<|>) :: Router a -> Router a -> Router a #

some :: Router a -> Router [a] #

many :: Router a -> Router [a] #

MonadPlus Router Source # 
Instance details

Defined in WebGear.Types

Methods

mzero :: Router a #

mplus :: Router a -> Router a -> Router a #

MonadIO Router Source # 
Instance details

Defined in WebGear.Types

Methods

liftIO :: IO a -> Router a #

MonadRouter Router Source # 
Instance details

Defined in WebGear.Types

MonadState PathInfo Router Source # 
Instance details

Defined in WebGear.Types

Methods

get :: Router PathInfo #

put :: PathInfo -> Router () #

state :: (PathInfo -> (a, PathInfo)) -> Router a #

MonadError RouteError Router Source # 
Instance details

Defined in WebGear.Types

class (MonadState PathInfo m, Alternative m, MonadPlus m) => MonadRouter m where Source #

HTTP request routing with short circuiting behavior.

Methods

rejectRoute :: m a Source #

Mark the current route as rejected, alternatives can be tried

errorResponse :: Response ByteString -> m a Source #

Short-circuit the current handler and return a response

catchErrorResponse :: m a -> (Response ByteString -> m a) -> m a Source #

Handle an error response

newtype PathInfo Source #

The path components to be matched by routing machinery

Constructors

PathInfo [Text] 
Instances
MonadState PathInfo Router Source # 
Instance details

Defined in WebGear.Types

Methods

get :: Router PathInfo #

put :: PathInfo -> Router () #

state :: (PathInfo -> (a, PathInfo)) -> Router a #

data RouteError Source #

Responses that cause routes to abort execution

Constructors

RouteMismatch

A route did not match and the next one can be tried

ErrorResponse (Response ByteString)

A route matched but returned a short circuiting error response

transform :: (forall x. m x -> n x) -> Handler' m req a -> Handler' n req a Source #

A natural transformation of handler monads.

This is useful if you want to run a handler in a monad other than Router.

runRoute :: ToByteString a => Handler '[] a -> Request -> IO Response Source #

Convert a routable handler into a plain function from request to response.

toApplication :: ToByteString a => Handler '[] a -> Application Source #

Convert a routable handler into a Wai application