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.Middlewares.Header

Contents

Description

Middlewares related to HTTP headers.

Synopsis

Traits

type Header (name :: Symbol) (val :: Type) = Header' Required Strict name val Source #

A Trait for capturing a header with name name in a request or response and convert it to some type val via FromHttpApiData.

data Header' (e :: Existence) (p :: ParseStyle) (name :: Symbol) (val :: Type) Source #

A Trait for capturing an HTTP header of specified name and converting it to some type val via FromHttpApiData. The modifiers e and p determine how missing headers and parsing errors are handled. The header name is compared case-insensitively.

Instances
(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 #

(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) 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 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 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) = ()

type HeaderMatch (name :: Symbol) (val :: Symbol) = HeaderMatch' Required name val Source #

A Trait for ensuring that a header with a specified name has value val.

data HeaderMatch' (e :: Existence) (name :: Symbol) (val :: Symbol) Source #

A Trait for ensuring that an HTTP header with specified name has value val. The modifier e determines how missing headers are handled. The header name is compared case-insensitively.

Instances
(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 #

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

Middlewares

header :: forall name val m req a. (KnownSymbol name, FromHttpApiData val, MonadRouter m) => RequestMiddleware' m req (Header name val ': req) a Source #

A middleware to extract a header value and convert it to a value of type val using FromHttpApiData.

Example usage:

header @"Content-Length" @Integer handler

The associated trait attribute has type val. A 400 Bad Request response is returned if the header is not found or could not be parsed.

optionalHeader :: forall name val m req a. (KnownSymbol name, FromHttpApiData val, MonadRouter m) => RequestMiddleware' m req (Header' Optional Strict name val ': req) a Source #

A middleware to extract a header value and convert it to a value of type val using FromHttpApiData.

Example usage:

optionalHeader @"Content-Length" @Integer handler

The associated trait attribute has type Maybe val; a Nothing value indicates that the header is missing from the request. A 400 Bad Request response is returned if the header could not be parsed.

lenientHeader :: forall name val m req a. (KnownSymbol name, FromHttpApiData val, MonadRouter m) => RequestMiddleware' m req (Header' Required Lenient name val ': req) a Source #

A middleware to extract a header value and convert it to a value of type val using FromHttpApiData.

Example usage:

lenientHeader @"Content-Length" @Integer handler

The associated trait attribute has type Either Text val. A 400 Bad Request reponse is returned if the header is missing. The parsing is done leniently; the trait attribute is set to Left Text in case of parse errors or Right val on success.

optionalLenientHeader :: forall name val m req a. (KnownSymbol name, FromHttpApiData val, MonadRouter m) => RequestMiddleware' m req (Header' Optional Lenient name val ': req) a Source #

A middleware to extract an optional header value and convert it to a value of type val using FromHttpApiData.

Example usage:

optionalLenientHeader @"Content-Length" @Integer handler

The associated trait attribute has type Maybe (Either Text val). This middleware never fails.

headerMatch :: forall name val m req a. (KnownSymbol name, KnownSymbol val, MonadRouter m) => RequestMiddleware' m req (HeaderMatch name val ': req) a Source #

A middleware to ensure that a header in the request has a specific value. Fails the handler with a 400 Bad Request response if the header does not exist or does not match.

optionalHeaderMatch :: forall name val m req a. (KnownSymbol name, KnownSymbol val, MonadRouter m) => RequestMiddleware' m req (HeaderMatch' Optional name val ': req) a Source #

A middleware to ensure that an optional header in the request has a specific value. Fails the handler with a 400 Bad Request response if the header has a different value.

requestContentTypeHeader :: forall val m req a. (KnownSymbol val, MonadRouter m) => RequestMiddleware' m req (HeaderMatch "Content-Type" val ': req) a Source #

A middleware to check that the Content-Type header in the request has a specific value. It will fail the handler if the header did not match.

Example usage:

requestContentTypeHeader @"application/json" handler

addResponseHeader :: forall t m req a. (ToHttpApiData t, Monad m) => HeaderName -> t -> ResponseMiddleware' m req a a Source #

A middleware to create or update a response header.

Example usage:

addResponseHeader "Content-type" "application/json" handler