servant-0.20.2: A family of combinators for defining webservices APIs

Safe Haskell | None
Language | Haskell2010

Servant.API

Contents

- Combinators
- Accessing information from the request
- Actual endpoints, distinguished by HTTP method
- Sub-APIs defined as records of routes
- Streaming endpoints, distinguished by HTTP method
- Authentication
- Endpoints description
- Content Types
- Response Headers
- Untyped endpoints
- FromHttpApiData and ToHttpApiData
- Experimental modules
- Links
- Re-exports

Synopsis

- module Servant.API.Sub
- module Servant.API.Alternative
- module Servant.API.Empty
- data Strict
- data Lenient
- data Optional
- data Required
- module Servant.API.Capture
- module Servant.API.Header
- module Servant.API.HttpVersion
- module Servant.API.QueryParam
- data QueryString
- data DeepQuery (sym :: Symbol) a
- module Servant.API.Fragment
- module Servant.API.ReqBody
- module Servant.API.RemoteHost
- module Servant.API.IsSecure
- module Servant.API.Vault
- module Servant.API.WithNamedContext
- module Servant.API.WithResource
- type Get = Verb 'GET 200
- type Put = Verb 'PUT 200
- data StdMethod
  - = GET
  - | POST
  - | HEAD
  - | PUT
  - | DELETE
  - | TRACE
  - | CONNECT
  - | OPTIONS
  - | PATCH
- type Delete = Verb 'DELETE 200
- type DeleteAccepted = Verb 'DELETE 202
- type DeleteNoContent = NoContentVerb 'DELETE
- type DeleteNonAuthoritative = Verb 'DELETE 203
- type GetAccepted = Verb 'GET 202
- type GetNoContent = NoContentVerb 'GET
- type GetNonAuthoritative = Verb 'GET 203
- type GetPartialContent = Verb 'GET 206
- type GetResetContent = Verb 'GET 205
- data NoContentVerb (method :: k1)
- type Patch = Verb 'PATCH 200
- type PatchAccepted = Verb 'PATCH 202
- type PatchNoContent = NoContentVerb 'PATCH
- type PatchNonAuthoritative = Verb 'PATCH 203
- type Post = Verb 'POST 200
- type PostAccepted = Verb 'POST 202
- type PostCreated = Verb 'POST 201
- type PostNoContent = NoContentVerb 'POST
- type PostNonAuthoritative = Verb 'POST 203
- type PostResetContent = Verb 'POST 205
- type PutAccepted = Verb 'PUT 202
- type PutCreated = Verb 'PUT 201
- type PutNoContent = NoContentVerb 'PUT
- type PutNonAuthoritative = Verb 'PUT 203
- class ReflectMethod (a :: k) where
  - reflectMethod :: Proxy a -> Method
- data Verb (method :: k1) (statusCode :: Nat) (contentTypes :: [Type]) a
- type family Unique (xs :: [k]) where ...
- type Union = NS I
- data UVerb (method :: StdMethod) (contentTypes :: [Type]) (as :: [Type])
- class KnownStatus (StatusOf a) => HasStatus a where
  - type StatusOf a :: Nat
- type IsMember (a :: u) (as :: [u]) = (Unique as, CheckElemIsMember a as, UElem a as)
- type family StatusOf a :: Nat
- type family Statuses (as :: [Type]) :: [Nat]
- type family Statuses (as :: [Type]) :: [Nat]
- newtype WithStatus (k :: Nat) a = WithStatus a
- inject :: UElem x xs => f x -> NS f xs
- statusOf :: HasStatus a => proxy a -> Status
- module Servant.API.NamedRoutes
- class GenericMode (mode :: k) where
  - type (mode :: k) :- api
- type family (mode :: k) :- api
- data AsApi
- class GServantProduct (f :: k -> Type)
- type GenericServant (routes :: k -> Type) (mode :: k) = (GenericMode mode, Generic (routes mode), GServantProduct (Rep (routes mode)))
- type ToServant (routes :: k -> Type) (mode :: k) = GToServant (Rep (routes mode))
- type ToServantApi (routes :: Type -> Type) = ToServant routes AsApi
- fromServant :: forall {k} routes (mode :: k). GenericServant routes mode => ToServant routes mode -> routes mode
- genericApi :: forall (routes :: Type -> Type). GenericServant routes AsApi => Proxy routes -> Proxy (ToServantApi routes)
- toServant :: forall {k} routes (mode :: k). GenericServant routes mode => routes mode -> ToServant routes mode
- data Stream (method :: k1) (status :: Nat) framing contentType a
- class FramingRender (strategy :: k) where
  - framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy strategy -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString
- class FramingUnrender (strategy :: k) where
  - framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy strategy -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a
- class FromSourceIO chunk a | a -> chunk where
  - fromSourceIO :: SourceIO chunk -> IO a
- data NetstringFraming
- data NewlineFraming
- data NoFraming
- type SourceIO = SourceT IO
- type StreamBody = StreamBody' ('[] :: [Type])
- data StreamBody' (mods :: [Type]) framing contentType a
- type StreamGet = Stream 'GET 200
- type StreamPost = Stream 'POST 200
- class ToSourceIO chunk a | a -> chunk where
  - toSourceIO :: a -> SourceIO chunk
- module Servant.API.BasicAuth
- data Description (sym :: Symbol)
- data Summary (sym :: Symbol)
- class Accept (ctype :: k) where
  - contentType :: Proxy ctype -> MediaType
  - contentTypes :: Proxy ctype -> NonEmpty MediaType
- data FormUrlEncoded
- data JSON
- class Accept ctype => MimeRender (ctype :: k) a where
  - mimeRender :: Proxy ctype -> a -> ByteString
- class Accept ctype => MimeUnrender (ctype :: k) a where
  - mimeUnrender :: Proxy ctype -> ByteString -> Either String a
  - mimeUnrenderWithType :: Proxy ctype -> MediaType -> ByteString -> Either String a
- data NoContent = NoContent
- data OctetStream
- data PlainText
- data ResponseHeader (sym :: Symbol) a
  - = Header a
  - | MissingHeader
  - | UndecodableHeader ByteString
- class AddHeader (mods :: [Type]) (h :: Symbol) v orig new | mods h v orig -> new, new -> mods, new -> h, new -> v, new -> orig
- class BuildHeadersTo (hs :: [Type]) where
  - buildHeadersTo :: [Header] -> HList hs
- class GetHeaders ls where
  - getHeaders :: ls -> [Header]
- data HList (a :: [Type]) where
  - HNil :: HList ('[] :: [Type])
  - HCons :: forall (h :: Symbol) x (xs :: [Type]) (mods :: [Type]). ResponseHeader h x -> HList xs -> HList (Header' mods h x ': xs)
- class HasResponseHeader (h :: Symbol) a (headers :: [Type])
- data Headers (ls :: [Type]) a = Headers {
  - getResponse :: a
  - getHeadersHList :: HList ls
  }
- addHeader :: forall (h :: Symbol) v orig new. AddHeader '[Optional, Strict] h v orig new => v -> orig -> new
- addHeader' :: forall (mods :: [Type]) (h :: Symbol) v orig new. AddHeader mods h v orig new => v -> orig -> new
- lookupResponseHeader :: forall (h :: Symbol) a (headers :: [Type]) r. HasResponseHeader h a headers => Headers headers r -> ResponseHeader h a
- noHeader :: forall (h :: Symbol) v orig new. AddHeader '[Optional, Strict] h v orig new => orig -> new
- noHeader' :: forall (mods :: [Type]) (h :: Symbol) v orig new. AddHeader mods h v orig new => orig -> new
- module Servant.API.Raw
- class FromHttpApiData a where
  - parseUrlPiece :: Text -> Either Text a
  - parseHeader :: ByteString -> Either Text a
  - parseQueryParam :: Text -> Either Text a
- class ToHttpApiData a where
  - toUrlPiece :: a -> Text
  - toEncodedUrlPiece :: a -> Builder
  - toHeader :: a -> ByteString
  - toQueryParam :: a -> Text
  - toEncodedQueryParam :: a -> Builder
- module Servant.API.Experimental.Auth
- data URI = URI {
  - uriScheme :: String
  - uriAuthority :: Maybe URIAuth
  - uriPath :: String
  - uriQuery :: String
  - uriFragment :: String
  }
- class HasLink (endpoint :: k) where
  - type MkLink (endpoint :: k) a
  - toLink :: (Link -> a) -> Proxy endpoint -> Link -> MkLink endpoint a
- type family IsElem endpoint api where ...
- type family IsElem' a s
- data Link
- safeLink :: (IsElem endpoint api, HasLink endpoint) => Proxy api -> Proxy endpoint -> MkLink endpoint Link
- type family MkLink (endpoint :: k) a
- type family If (cond :: Bool) (tru :: k) (fls :: k) :: k where ...
- data SBool (b :: Bool) where
  - STrue :: SBool 'True
  - SFalse :: SBool 'False
- class SBoolI (b :: Bool) where
  - sbool :: SBool b

# Combinators

module Servant.API.Sub

Type-level combinator for expressing subrouting: ``:>``

module Servant.API.Alternative

Type-level combinator for alternative endpoints: ``:<|>``

module Servant.API.Empty

Type-level combinator for an empty API: ``EmptyAPI``

data Strict #

Strictly parsed argument. Not wrapped.

data Lenient #

Leniently parsed argument, i.e. parsing never fail. Wrapped in ``Either` `Text``.

data Optional #

Optional argument. Wrapped in `Maybe`.

data Required #

Required argument. Not wrapped.

Type-level modifiers for `QueryParam`, `Header` and `ReqBody`.

# Accessing information from the request

module Servant.API.Capture

Capturing parts of the url path as parsed values: ``Capture`` and ``CaptureAll``

module Servant.API.Header

Retrieving specific headers from the request

module Servant.API.HttpVersion

Retrieving the HTTP version of the request

module Servant.API.QueryParam

Retrieving parameters from the query string of the `URI`: ``QueryParam``

data QueryString #

Extract the whole query string from a request. This is useful for query strings containing dynamic parameter names. For query strings with static parameter names, `QueryParam` is more suited.

Example:

    >>> -- /books?author=<author name>&year=<book year>
    >>> type MyApi = "books" :> QueryString :> Get '[JSON] [Book]

data DeepQuery (sym :: Symbol) a #

Extract an deep object from a query string.

Example:

    >>> -- /books?filter[author][name]=<author name>&filter[year]=<book year>
    >>> type MyApi = "books" :> DeepQuery "filter" BookQuery :> Get '[JSON] [Book]

Retrieving the complete query string of the `URI`: ``QueryString``

module Servant.API.Fragment

Documenting the fragment of the `URI`: ``Fragment``

module Servant.API.ReqBody

Accessing the request body as a JSON-encoded type: ``ReqBody``

module Servant.API.RemoteHost

Retrieving the IP of the client

module Servant.API.IsSecure

Is the request made through HTTPS?

module Servant.API.Vault

Access the location for arbitrary data to be shared by applications and middleware

module Servant.API.WithNamedContext

Access context entries in combinators in servant-server

module Servant.API.WithResource

Access a managed resource scoped to a single request

# Actual endpoints, distinguished by HTTP method

type Get = Verb 'GET 200 #

`GET` with 200 status code.

type Put = Verb 'PUT 200 #

`PUT` with 200 status code.

data StdMethod #

HTTP standard method (as defined by RFC 2616, and PATCH which is defined by RFC 5789).

Since: http-types-0.2.0

Constructors

GET |
POST |
HEAD |
PUT |
DELETE |
TRACE |
CONNECT |
OPTIONS |
PATCH | Since: http-types-0.8.0

#### Instances

Instances details

Data StdMethod | Since: http-types-0.12.4

Instance details

Defined in Network.HTTP.Types.Method

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> StdMethod -> c StdMethod #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c StdMethod #

toConstr :: StdMethod -> Constr #

dataTypeOf :: StdMethod -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c StdMethod) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c StdMethod) #

gmapT :: (forall b. Data b => b -> b) -> StdMethod -> StdMethod #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> StdMethod -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> StdMethod -> r #

gmapQ :: (forall d. Data d => d -> u) -> StdMethod -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> StdMethod -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> StdMethod -> m StdMethod #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> StdMethod -> m StdMethod #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> StdMethod -> m StdMethod #

Bounded StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods minBound :: StdMethod # maxBound :: StdMethod #
Enum StdMethod |

Instance details

Defined in Network.HTTP.Types.Method

Methods

succ :: StdMethod -> StdMethod #

pred :: StdMethod -> StdMethod #

toEnum :: Int -> StdMethod #

fromEnum :: StdMethod -> Int #

enumFrom :: StdMethod -> [StdMethod] #

enumFromThen :: StdMethod -> StdMethod -> [StdMethod] #

enumFromTo :: StdMethod -> StdMethod -> [StdMethod] #

enumFromThenTo :: StdMethod -> StdMethod -> StdMethod -> [StdMethod] #

Generic StdMethod |

Instance details

Defined in Network.HTTP.Types.Method

Associated Types

type Rep StdMethod | Since: http-types-0.12.4

Instance details

Defined in Network.HTTP.Types.Method

type Rep StdMethod = D1 ('MetaData "StdMethod" "Network.HTTP.Types.Method" "http-types-0.12.4-HhEPaOzd8crnbrvqiOppv" 'False) (((C1 ('MetaCons "GET" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "POST" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "HEAD" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PUT" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "DELETE" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TRACE" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "CONNECT" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "OPTIONS" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PATCH" 'PrefixI 'False) (U1 :: Type -> Type)))))

Methods

from :: StdMethod -> Rep StdMethod x #

to :: Rep StdMethod x -> StdMethod #

Ix StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods range :: (StdMethod, StdMethod) -> [StdMethod] # index :: (StdMethod, StdMethod) -> StdMethod -> Int # unsafeIndex :: (StdMethod, StdMethod) -> StdMethod -> Int # inRange :: (StdMethod, StdMethod) -> StdMethod -> Bool # rangeSize :: (StdMethod, StdMethod) -> Int # unsafeRangeSize :: (StdMethod, StdMethod) -> Int #
Read StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods readsPrec :: Int -> ReadS StdMethod # readList :: ReadS [StdMethod] # readPrec :: ReadPrec StdMethod # readListPrec :: ReadPrec [StdMethod] #
Show StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods showsPrec :: Int -> StdMethod -> ShowS # show :: StdMethod -> String # showList :: [StdMethod] -> ShowS #
Eq StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods (==) :: StdMethod -> StdMethod -> Bool # (/=) :: StdMethod -> StdMethod -> Bool #
Ord StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods compare :: StdMethod -> StdMethod -> Ordering # (<) :: StdMethod -> StdMethod -> Bool # (<=) :: StdMethod -> StdMethod -> Bool # (>) :: StdMethod -> StdMethod -> Bool # (>=) :: StdMethod -> StdMethod -> Bool # max :: StdMethod -> StdMethod -> StdMethod # min :: StdMethod -> StdMethod -> StdMethod #
ReflectMethod 'CONNECT # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'CONNECT -> Method #
ReflectMethod 'DELETE # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'DELETE -> Method #
ReflectMethod 'GET # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'GET -> Method #
ReflectMethod 'HEAD # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'HEAD -> Method #
ReflectMethod 'OPTIONS # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'OPTIONS -> Method #
ReflectMethod 'PATCH # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'PATCH -> Method #
ReflectMethod 'POST # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'POST -> Method #
ReflectMethod 'PUT # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'PUT -> Method #
ReflectMethod 'TRACE # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'TRACE -> Method #
type Rep StdMethod | Since: http-types-0.12.4

Instance details

Defined in Network.HTTP.Types.Method

type Rep StdMethod = D1 ('MetaData "StdMethod" "Network.HTTP.Types.Method" "http-types-0.12.4-HhEPaOzd8crnbrvqiOppv" 'False) (((C1 ('MetaCons "GET" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "POST" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "HEAD" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PUT" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "DELETE" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TRACE" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "CONNECT" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "OPTIONS" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PATCH" 'PrefixI 'False) (U1 :: Type -> Type)))))

type Delete = Verb 'DELETE 200 #

`DELETE` with 200 status code.

type DeleteAccepted = Verb 'DELETE 202 #

`DELETE` with 202 status code.

type DeleteNoContent = NoContentVerb 'DELETE #

`DELETE` with 204 status code.

type DeleteNonAuthoritative = Verb 'DELETE 203 #

`DELETE` with 203 status code.

type GetAccepted = Verb 'GET 202 #

`GET` with 202 status code.

type GetNoContent = NoContentVerb 'GET #

`GET` with 204 status code.

type GetNonAuthoritative = Verb 'GET 203 #

`GET` with 203 status code.

type GetPartialContent = Verb 'GET 206 #

`GET` with 206 status code.

type GetResetContent = Verb 'GET 205 #

`GET` with 205 status code.

data NoContentVerb (method :: k1) #

`NoContentVerb` is a specific type to represent `NoContent` responses. It does not require either a list of content types (because there's no content) or a status code (because it should always be 204).

#### Instances

Instances details

HasLink (NoContentVerb m :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (NoContentVerb m) -> Link -> MkLink (NoContentVerb m) a #
Generic (NoContentVerb method) # |

Instance details

Defined in Servant.API.Verbs

Associated Types

type Rep (NoContentVerb method) |
Instance details Defined in Servant.API.Verbs type Rep (NoContentVerb method) = D1 ('MetaData "NoContentVerb" "Servant.API.Verbs" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

Methods

from :: NoContentVerb method -> Rep (NoContentVerb method) x #

to :: Rep (NoContentVerb method) x -> NoContentVerb method #

type MkLink (NoContentVerb m :: Type) r # |
Instance details Defined in Servant.Links type MkLink (NoContentVerb m :: Type) r = r
type Rep (NoContentVerb method) # |
Instance details Defined in Servant.API.Verbs type Rep (NoContentVerb method) = D1 ('MetaData "NoContentVerb" "Servant.API.Verbs" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

type Patch = Verb 'PATCH 200 #

`PATCH` with 200 status code.

type PatchAccepted = Verb 'PATCH 202 #

`PATCH` with 202 status code.

type PatchNoContent = NoContentVerb 'PATCH #

`PATCH` with 204 status code.

type PatchNonAuthoritative = Verb 'PATCH 203 #

`PATCH` with 203 status code.

type Post = Verb 'POST 200 #

`POST` with 200 status code.

type PostAccepted = Verb 'POST 202 #

`POST` with 202 status code.

type PostCreated = Verb 'POST 201 #

`POST` with 201 status code.

type PostNoContent = NoContentVerb 'POST #

`POST` with 204 status code.

type PostNonAuthoritative = Verb 'POST 203 #

`POST` with 203 status code.

type PostResetContent = Verb 'POST 205 #

`POST` with 205 status code.

type PutAccepted = Verb 'PUT 202 #

`PUT` with 202 status code.

type PutCreated = Verb 'PUT 201 #

`PUT` with 201 status code.

type PutNoContent = NoContentVerb 'PUT #

`PUT` with 204 status code.

type PutNonAuthoritative = Verb 'PUT 203 #

`PUT` with 203 status code.

class ReflectMethod (a :: k) where #

Methods

reflectMethod :: Proxy a -> Method #

#### Instances

Instances details

ReflectMethod 'CONNECT # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'CONNECT -> Method #
ReflectMethod 'DELETE # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'DELETE -> Method #
ReflectMethod 'GET # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'GET -> Method #
ReflectMethod 'HEAD # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'HEAD -> Method #
ReflectMethod 'OPTIONS # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'OPTIONS -> Method #
ReflectMethod 'PATCH # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'PATCH -> Method #
ReflectMethod 'POST # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'POST -> Method #
ReflectMethod 'PUT # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'PUT -> Method #
ReflectMethod 'TRACE # |
Instance details Defined in Servant.API.Verbs Methods reflectMethod :: Proxy 'TRACE -> Method #

data Verb (method :: k1) (statusCode :: Nat) (contentTypes :: [Type]) a #

`Verb` is a general type for representing HTTP verbs (a.k.a. methods). For convenience, type synonyms for each verb with a 200 response code are provided, but you are free to define your own:

    >>> type Post204 contentTypes a = Verb 'POST 204 contentTypes a

#### Instances

Instances details

HasLink (Verb m s ct a :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (Verb m s ct a) -> Link -> MkLink (Verb m s ct a) a0 #
Generic (Verb method statusCode contentTypes a) # |

Instance details

Defined in Servant.API.Verbs

Associated Types

type Rep (Verb method statusCode contentTypes a) |
Instance details Defined in Servant.API.Verbs type Rep (Verb method statusCode contentTypes a) = D1 ('MetaData "Verb" "Servant.API.Verbs" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

Methods

from :: Verb method statusCode contentTypes a -> Rep (Verb method statusCode contentTypes a) x #

to :: Rep (Verb method statusCode contentTypes a) x -> Verb method statusCode contentTypes a #

AtMostOneFragment (Verb m s ct typ) # |
Instance details Defined in Servant.API.TypeLevel
type MkLink (Verb m s ct a :: Type) r # |
Instance details Defined in Servant.Links type MkLink (Verb m s ct a :: Type) r = r
type Rep (Verb method statusCode contentTypes a) # |
Instance details Defined in Servant.API.Verbs type Rep (Verb method statusCode contentTypes a) = D1 ('MetaData "Verb" "Servant.API.Verbs" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

type family Unique (xs :: [k]) where ... #

Check whether all values in a type-level list are distinct. This will throw a nice error if there are any duplicate elements in the list.

Equations

Unique (xs :: [k]) = If (Nubbed xs == 'True) () (TypeError (DuplicateElementError xs) :: Constraint) |

type Union = NS I #

data UVerb (method :: StdMethod) (contentTypes :: [Type]) (as :: [Type]) #

A variant of `Verb` that can have any of a number of response values and status codes.

FUTUREWORK: it would be nice to make `Verb` a special case of `UVerb`, and only write instances for `HasServer` etc. for the latter, getting them for the former for free. Something like:

    type Verb method statusCode contentTypes a = UVerb method contentTypes [WithStatus statusCode a]

Backwards compatibility is tricky, though: this type alias would mean people would have to use `respond` instead of `pure` or `return`, so all old handlers would have to be rewritten.

#### Instances

Instances details

HasLink (UVerb m ct a :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (UVerb m ct a) -> Link -> MkLink (UVerb m ct a) a0 #
AtMostOneFragment (UVerb m cts as) # |
Instance details Defined in Servant.API.TypeLevel
type MkLink (UVerb m ct a :: Type) r # |
Instance details Defined in Servant.Links type MkLink (UVerb m ct a :: Type) r = r

class KnownStatus (StatusOf a) => HasStatus a #

Associated Types

type StatusOf a :: Nat #

#### Instances

Instances details

HasStatus NoContent # | If an API can respond with `NoContent` we assume that this will happen with the status code 204 No Content. If this needs to be overridden, `WithStatus` can be used.

Instance details

Defined in Servant.API.UVerb

Associated Types

type StatusOf NoContent |
Instance details Defined in Servant.API.UVerb type StatusOf NoContent = 204

HasStatus a => HasStatus (Headers ls a) # |

Instance details

Defined in Servant.API.UVerb

Associated Types

type StatusOf (Headers ls a) |
Instance details Defined in Servant.API.UVerb type StatusOf (Headers ls a) = StatusOf a

KnownStatus n => HasStatus (WithStatus n a) #

an instance of this typeclass assigns a HTTP status code to a return type

Example:

       data NotFoundError = NotFoundError String

       instance HasStatus NotFoundError where
         type StatusOf NotFoundError = 404

You can also use the convience newtype wrapper `WithStatus` if you want to avoid writing a `HasStatus` instance manually. It also has the benefit of showing the status code in the type; which might aid in readability.

Instance details

Defined in Servant.API.UVerb

Associated Types

type StatusOf (WithStatus n a) |
Instance details Defined in Servant.API.UVerb type StatusOf (WithStatus n a) = n

type IsMember (a :: u) (as :: [u]) = (Unique as, CheckElemIsMember a as, UElem a as) #

type family StatusOf a :: Nat #

#### Instances

Instances details

type StatusOf NoContent # |
Instance details Defined in Servant.API.UVerb type StatusOf NoContent = 204
type StatusOf (Headers ls a) # |
Instance details Defined in Servant.API.UVerb type StatusOf (Headers ls a) = StatusOf a
type StatusOf (WithStatus n a) # |
Instance details Defined in Servant.API.UVerb type StatusOf (WithStatus n a) = n

type family Statuses (as :: [Type]) :: [Nat] #

#### Instances

Instances details

type Statuses ('[] :: [Type]) # |
Instance details Defined in Servant.API.UVerb type Statuses ('[] :: [Type]) = '[] :: [Nat]
type Statuses (a ': as) # |
Instance details Defined in Servant.API.UVerb type Statuses (a ': as) = StatusOf a ': Statuses as

type family Statuses (as :: [Type]) :: [Nat] #

#### Instances

Instances details

type Statuses ('[] :: [Type]) # |
Instance details Defined in Servant.API.UVerb type Statuses ('[] :: [Type]) = '[] :: [Nat]
type Statuses (a ': as) # |
Instance details Defined in Servant.API.UVerb type Statuses (a ': as) = StatusOf a ': Statuses as

newtype WithStatus (k :: Nat) a #

A simple newtype wrapper that pairs a type with its status code. It implements all the content types that Servant ships with by default.

Constructors

WithStatus a |

#### Instances

Instances details

MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy FormUrlEncoded -> WithStatus _status a -> ByteString #
MimeRender JSON a => MimeRender JSON (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy JSON -> WithStatus _status a -> ByteString #
MimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy OctetStream -> WithStatus _status a -> ByteString #
MimeRender PlainText a => MimeRender PlainText (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy PlainText -> WithStatus _status a -> ByteString #
MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String (WithStatus _status a) #
MimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy JSON -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String (WithStatus _status a) #
MimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String (WithStatus _status a) #
MimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String (WithStatus _status a) #
Show a => Show (WithStatus k a) # |
Instance details Defined in Servant.API.UVerb Methods showsPrec :: Int -> WithStatus k a -> ShowS # show :: WithStatus k a -> String # showList :: [WithStatus k a] -> ShowS #
Eq a => Eq (WithStatus k a) # |
Instance details Defined in Servant.API.UVerb Methods (==) :: WithStatus k a -> WithStatus k a -> Bool # (/=) :: WithStatus k a -> WithStatus k a -> Bool #

KnownStatus n => HasStatus (WithStatus n a) #

an instance of this typeclass assigns a HTTP status code to a return type

Example:

       data NotFoundError = NotFoundError String

       instance HasStatus NotFoundError where
         type StatusOf NotFoundError = 404

You can also use the convience newtype wrapper `WithStatus` if you want to avoid writing a `HasStatus` instance manually. It also has the benefit of showing the status code in the type; which might aid in readability.

Instance details

Defined in Servant.API.UVerb

Associated Types

type StatusOf (WithStatus n a) |
Instance details Defined in Servant.API.UVerb type StatusOf (WithStatus n a) = n

type StatusOf (WithStatus n a) # |
Instance details Defined in Servant.API.UVerb type StatusOf (WithStatus n a) = n

inject :: UElem x xs => f x -> NS f xs #

statusOf :: HasStatus a => proxy a -> Status #

# Sub-APIs defined as records of routes

module Servant.API.NamedRoutes

class GenericMode (mode :: k) #

A class with a type family that applies an appropriate type family to the `api` parameter. For example, `AsApi` will leave `api` untouched, while ``AsServerT` m` will produce ``ServerT` api m`.

Associated Types

type (mode :: k) :- api infixl 0 #

#### Instances

Instances details

GenericMode AsApi # |

Instance details

Defined in Servant.API.Generic

Associated Types

type AsApi :- api |
Instance details Defined in Servant.API.Generic type AsApi :- api = api

GenericMode (AsLink a :: Type) # |
Instance details Defined in Servant.Links

type family (mode :: k) :- api infixl 0 #

#### Instances

Instances details

type AsApi :- api # |
Instance details Defined in Servant.API.Generic type AsApi :- api = api
type (AsLink a :: Type) :- api # |
Instance details Defined in Servant.Links type (AsLink a :: Type) :- api = MkLink api a

data AsApi #

A type that specifies that an API record contains an API definition. Only useful at type-level.

#### Instances

Instances details

GenericMode AsApi # |

Instance details

Defined in Servant.API.Generic

Associated Types

type AsApi :- api |
Instance details Defined in Servant.API.Generic type AsApi :- api = api

type AsApi :- api # |
Instance details Defined in Servant.API.Generic type AsApi :- api = api

class GServantProduct (f :: k -> Type) #

Minimal complete definition

gtoServant, gfromServant

#### Instances

Instances details

(GServantProduct l, GServantProduct r) => GServantProduct (l :*: r :: k -> Type) # |
Instance details Defined in Servant.API.Generic Methods gtoServant :: forall (p :: k). (l :*: r) p -> GToServant (l :*: r) gfromServant :: forall (p :: k). GToServant (l :*: r) -> (l :*: r) p
GServantProduct (K1 i c :: k -> Type) # |
Instance details Defined in Servant.API.Generic Methods gtoServant :: forall (p :: k). K1 i c p -> GToServant (K1 i c :: k -> Type) gfromServant :: forall (p :: k). GToServant (K1 i c :: k -> Type) -> K1 i c p
GServantProduct f => GServantProduct (M1 i c f :: k -> Type) # |
Instance details Defined in Servant.API.Generic Methods gtoServant :: forall (p :: k). M1 i c f p -> GToServant (M1 i c f) gfromServant :: forall (p :: k). GToServant (M1 i c f) -> M1 i c f p

type GenericServant (routes :: k -> Type) (mode :: k) = (GenericMode mode, Generic (routes mode), GServantProduct (Rep (routes mode))) #

A constraint alias, for work with `mode` and `routes`.

type ToServant (routes :: k -> Type) (mode :: k) = GToServant (Rep (routes mode)) #

Turns a generic product type into a tree of `:<|>` combinators.

type ToServantApi (routes :: Type -> Type) = ToServant routes AsApi #

fromServant :: forall {k} routes (mode :: k). GenericServant routes mode => ToServant routes mode -> routes mode #

Inverse of `toServant`.

This can be used to turn `generated` values such as client functions into records.

You may need to provide a type signature for the output type (your record type).

genericApi :: forall (routes :: Type -> Type). GenericServant routes AsApi => Proxy routes -> Proxy (ToServantApi routes) #

Get a `Proxy` of an API type.

toServant :: forall {k} routes (mode :: k). GenericServant routes mode => routes mode -> ToServant routes mode #

See `ToServant`, but at value-level.

# Streaming endpoints, distinguished by HTTP method

data Stream (method :: k1) (status :: Nat) framing contentType a #

A Stream endpoint for a given method emits a stream of encoded values at a given `Content-Type`, delimited by a `framing` strategy. Type synonyms are provided for standard methods.

#### Instances

Instances details

HasLink (Stream m status fr ct a :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (Stream m status fr ct a) -> Link -> MkLink (Stream m status fr ct a) a0 #
Generic (Stream method status framing contentType a) # |

Instance details

Defined in Servant.API.Stream

Associated Types

type Rep (Stream method status framing contentType a) |
Instance details Defined in Servant.API.Stream type Rep (Stream method status framing contentType a) = D1 ('MetaData "Stream" "Servant.API.Stream" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

Methods

from :: Stream method status framing contentType a -> Rep (Stream method status framing contentType a) x #

to :: Rep (Stream method status framing contentType a) x -> Stream method status framing contentType a #

type MkLink (Stream m status fr ct a :: Type) r # |
Instance details Defined in Servant.Links type MkLink (Stream m status fr ct a :: Type) r = r
type Rep (Stream method status framing contentType a) # |
Instance details Defined in Servant.API.Stream type Rep (Stream method status framing contentType a) = D1 ('MetaData "Stream" "Servant.API.Stream" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

class FramingRender (strategy :: k) where #

The `FramingRender` class provides the logic for emitting a framing strategy. The strategy transforms a ``SourceT` m a` into ``SourceT` m `ByteString``, therefore it can prepend, append and intercalate framing structure around chunks.

Note: as the ``Monad` m` is generic, this is pure transformation.

Methods

framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy strategy -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString #

#### Instances

Instances details

FramingRender NetstringFraming # |
Instance details Defined in Servant.API.Stream Methods framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy NetstringFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString #
FramingRender NewlineFraming # |
Instance details Defined in Servant.API.Stream Methods framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy NewlineFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString #
FramingRender NoFraming # |
Instance details Defined in Servant.API.Stream Methods framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy NoFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString #

class FramingUnrender (strategy :: k) where #

The `FramingUnrender` class provides the logic for parsing a framing strategy.

Methods

framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy strategy -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a #

#### Instances

Instances details

FramingUnrender NetstringFraming # |
Instance details Defined in Servant.API.Stream Methods framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy NetstringFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a #
FramingUnrender NewlineFraming # |
Instance details Defined in Servant.API.Stream Methods framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy NewlineFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a #
FramingUnrender NoFraming # | As `NoFraming` doesn't have frame separators, we take the chunks as given and try to convert them one by one. That works well when `a` is a `ByteString`.
Instance details Defined in Servant.API.Stream Methods framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy NoFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a #

class FromSourceIO chunk a | a -> chunk where #

`FromSourceIO` is intended to be implemented for types such as Conduit, Pipe, etc. By implementing this class, all such streaming abstractions can be used directly on the client side for talking to streaming endpoints.

Methods

fromSourceIO :: SourceIO chunk -> IO a #

#### Instances

Instances details

MonadIO m => FromSourceIO a (SourceT m a) # |
Instance details Defined in Servant.API.Stream Methods fromSourceIO :: SourceIO a -> IO (SourceT m a) #

data NetstringFraming #

The netstring framing strategy as defined by djb: http://cr.yp.to/proto/netstrings.txt

Any string of 8-bit bytes may be encoded as `[len]":"[string]","`. Here `[string]` is the string and `[len]` is a nonempty sequence of ASCII digits giving the length of `[string]` in decimal. The ASCII digits are `30` for 0, `31` for 1, and so on up through `39` for 9. Extra zeros at the front of `[len]` are prohibited: `[len]` begins with `30` exactly when `[string]` is empty.

For example, the string `"hello world!"` is encoded as `32 3a 68 65 6c 6c 6f 20 77 6f 72 6c 64 21 2c`, i.e., `"12:hello world!,"`. The empty string is encoded as `"0:,"`.

#### Instances

Instances details

FramingRender NetstringFraming # |
Instance details Defined in Servant.API.Stream Methods framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy NetstringFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString #
FramingUnrender NetstringFraming # |
Instance details Defined in Servant.API.Stream Methods framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy NetstringFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a #

data NewlineFraming #

A simple framing strategy that has no header, and inserts a newline character after each frame. This assumes that it is used with a Content-Type that encodes without newlines (e.g. JSON).

#### Instances

Instances details

FramingRender NewlineFraming # |
Instance details Defined in Servant.API.Stream Methods framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy NewlineFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString #
FramingUnrender NewlineFraming # |
Instance details Defined in Servant.API.Stream Methods framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy NewlineFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a #

data NoFraming #

A framing strategy that does not do any framing at all, it just passes the input data This will be used most of the time with binary data, such as files

#### Instances

Instances details

FramingRender NoFraming # |
Instance details Defined in Servant.API.Stream Methods framingRender :: forall (m :: Type -> Type) a. Monad m => Proxy NoFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString #
FramingUnrender NoFraming # | As `NoFraming` doesn't have frame separators, we take the chunks as given and try to convert them one by one. That works well when `a` is a `ByteString`.
Instance details Defined in Servant.API.Stream Methods framingUnrender :: forall (m :: Type -> Type) a. Monad m => Proxy NoFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a #

type SourceIO = SourceT IO #

Stream endpoints may be implemented as producing a ``SourceIO` chunk`.

Clients reading from streaming endpoints can be implemented as consuming a ``SourceIO` chunk`.

type StreamBody = StreamBody' ('[] :: [Type]) #

A stream request body.

data StreamBody' (mods :: [Type]) framing contentType a #

#### Instances

Instances details

HasLink sub => HasLink (StreamBody' mods framing ct a :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (StreamBody' mods framing ct a :> sub) -> Link -> MkLink (StreamBody' mods framing ct a :> sub) a0 #
Generic (StreamBody' mods framing contentType a) # |

Instance details

Defined in Servant.API.Stream

Associated Types

type Rep (StreamBody' mods framing contentType a) |
Instance details Defined in Servant.API.Stream type Rep (StreamBody' mods framing contentType a) = D1 ('MetaData "StreamBody'" "Servant.API.Stream" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

Methods

from :: StreamBody' mods framing contentType a -> Rep (StreamBody' mods framing contentType a) x #

to :: Rep (StreamBody' mods framing contentType a) x -> StreamBody' mods framing contentType a #

type MkLink (StreamBody' mods framing ct a :> sub :: Type) r # |
Instance details Defined in Servant.Links type MkLink (StreamBody' mods framing ct a :> sub :: Type) r = MkLink sub r
type Rep (StreamBody' mods framing contentType a) # |
Instance details Defined in Servant.API.Stream type Rep (StreamBody' mods framing contentType a) = D1 ('MetaData "StreamBody'" "Servant.API.Stream" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (V1 :: Type -> Type)

type StreamGet = Stream 'GET 200 #

type StreamPost = Stream 'POST 200 #

class ToSourceIO chunk a | a -> chunk where #

`ToSourceIO` is intended to be implemented for types such as Conduit, Pipe, etc. By implementing this class, all such streaming abstractions can be used directly as endpoints.

Methods

toSourceIO :: a -> SourceIO chunk #

#### Instances

Instances details

ToSourceIO a (NonEmpty a) # |
Instance details Defined in Servant.API.Stream Methods toSourceIO :: NonEmpty a -> SourceIO a #
ToSourceIO a [a] # |
Instance details Defined in Servant.API.Stream Methods toSourceIO :: [a] -> SourceIO a #
SourceToSourceIO m => ToSourceIO chunk (SourceT m chunk) # | Relax to use auxiliary class, have m
Instance details Defined in Servant.API.Stream Methods toSourceIO :: SourceT m chunk -> SourceIO chunk #

# Authentication

module Servant.API.BasicAuth

# Endpoints description

data Description (sym :: Symbol) #

Add more verbose description for (part of) API.

Example:

    >>> :{
    type MyApi = Description
     "This comment is visible in multiple Servant interpretations \
     \and can be really long if necessary. \
     \Haskell multiline String support is not perfect \
     \but it's still very readable."
    :> Get '[JSON] Book
    :}

#### Instances

Instances details

HasLink sub => HasLink (Description s :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (Description s :> sub) -> Link -> MkLink (Description s :> sub) a #
type MkLink (Description s :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (Description s :> sub :: Type) a = MkLink sub a

data Summary (sym :: Symbol) #

Add a short summary for (part of) API.

Example:

    >>> type MyApi = Summary "Get book by ISBN." :> "books" :> Capture "isbn" Text :> Get '[JSON] Book

#### Instances

Instances details

HasLink sub => HasLink (Summary s :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (Summary s :> sub) -> Link -> MkLink (Summary s :> sub) a #
type MkLink (Summary s :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (Summary s :> sub :: Type) a = MkLink sub a

# Content Types

class Accept (ctype :: k) where #

Instances of `Accept` represent mimetypes. They are used for matching against the `Accept` HTTP header of the request, and for setting the `Content-Type` header of the response

Example:

    >>> import Network.HTTP.Media ((//), (/:))
    >>> data HTML
    >>> :{
    instance Accept HTML where
       contentType _ = "text" // "html" /: ("charset", "utf-8")
    :}

Minimal complete definition

contentType | contentTypes

Methods

contentType :: Proxy ctype -> MediaType #

contentTypes :: Proxy ctype -> NonEmpty MediaType #

#### Instances

Instances details

Accept FormUrlEncoded #

    application/x-www-form-urlencoded

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy FormUrlEncoded -> MediaType # contentTypes :: Proxy FormUrlEncoded -> NonEmpty MediaType #

Accept JSON #

    application/json

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy JSON -> MediaType # contentTypes :: Proxy JSON -> NonEmpty MediaType #

Accept OctetStream #

    application/octet-stream

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy OctetStream -> MediaType # contentTypes :: Proxy OctetStream -> NonEmpty MediaType #

Accept PlainText #

    text/plain;charset=utf-8

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy PlainText -> MediaType # contentTypes :: Proxy PlainText -> NonEmpty MediaType #

data FormUrlEncoded #

#### Instances

Instances details

Accept FormUrlEncoded #

    application/x-www-form-urlencoded

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy FormUrlEncoded -> MediaType # contentTypes :: Proxy FormUrlEncoded -> NonEmpty MediaType #
ToForm a => MimeRender FormUrlEncoded a # | `urlEncodeAsForm` Note that the `mimeUnrender p (mimeRender p x) == Right x` law only holds if every element of x is non-null (i.e., not `("", "")`)
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy FormUrlEncoded -> a -> ByteString #
FromForm a => MimeUnrender FormUrlEncoded a # | `urlDecodeAsForm` Note that the `mimeUnrender p (mimeRender p x) == Right x` law only holds if every element of x is non-null (i.e., not `("", "")`)
Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String a # mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String a #
MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy FormUrlEncoded -> WithStatus _status a -> ByteString #
MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String (WithStatus _status a) #

data JSON #

#### Instances

Instances details

Accept JSON #

    application/json

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy JSON -> MediaType # contentTypes :: Proxy JSON -> NonEmpty MediaType #
ToJSON a => MimeRender JSON a # | `encode`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy JSON -> a -> ByteString #
FromJSON a => MimeUnrender JSON a # | `eitherDecode`
Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy JSON -> ByteString -> Either String a # mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String a #
MimeRender JSON a => MimeRender JSON (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy JSON -> WithStatus _status a -> ByteString #
MimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy JSON -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String (WithStatus _status a) #

class Accept ctype => MimeRender (ctype :: k) a where #

Instantiate this class to register a way of serializing a type based on the `Accept` header.

Example:

    data MyContentType

    instance Accept MyContentType where
       contentType _ = "example" // "prs.me.mine" /: ("charset", "utf-8")

    instance Show a => MimeRender MyContentType a where
       mimeRender _ val = pack ("This is MINE! " ++ show val)

    type MyAPI = "path" :> Get '[MyContentType] Int

Methods

mimeRender :: Proxy ctype -> a -> ByteString #

#### Instances

Instances details

ToForm a => MimeRender FormUrlEncoded a # | `urlEncodeAsForm` Note that the `mimeUnrender p (mimeRender p x) == Right x` law only holds if every element of x is non-null (i.e., not `("", "")`)
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy FormUrlEncoded -> a -> ByteString #
ToJSON a => MimeRender JSON a # | `encode`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy JSON -> a -> ByteString #
MimeRender OctetStream ByteString # | `fromStrict`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy OctetStream -> ByteString -> ByteString #

MimeRender OctetStream ByteString #

    id

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy OctetStream -> ByteString -> ByteString #

MimeRender PlainText Text #

    fromStrict . TextS.encodeUtf8

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> Text -> ByteString #
MimeRender PlainText Text # | `encodeUtf8`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> Text -> ByteString #

MimeRender PlainText String #

    BC.pack

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> String -> ByteString #
MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy FormUrlEncoded -> WithStatus _status a -> ByteString #
MimeRender JSON a => MimeRender JSON (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy JSON -> WithStatus _status a -> ByteString #
MimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy OctetStream -> WithStatus _status a -> ByteString #
MimeRender PlainText a => MimeRender PlainText (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy PlainText -> WithStatus _status a -> ByteString #

class Accept ctype => MimeUnrender (ctype :: k) a where #

Instantiate this class to register a way of deserializing a type based on the request's `Content-Type` header.

    >>> import Network.HTTP.Media hiding (Accept)
    >>> import qualified Data.ByteString.Lazy.Char8 as BSC
    >>> data MyContentType = MyContentType String

    >>> :{
    instance Accept MyContentType where
       contentType _ = "example" // "prs.me.mine" /: ("charset", "utf-8")
    :}

    >>> :{
    instance Read a => MimeUnrender MyContentType a where
       mimeUnrender _ bs = case BSC.take 12 bs of
         "MyContentType" -> return . read . BSC.unpack $ BSC.drop 12 bs
         _ -> Left "didn't start with the magic incantation"
    :}

    >>> type MyAPI = "path" :> ReqBody '[MyContentType] Int :> Get '[JSON] Int

Minimal complete definition

mimeUnrender | mimeUnrenderWithType

Methods

mimeUnrender :: Proxy ctype -> ByteString -> Either String a #

mimeUnrenderWithType :: Proxy ctype -> MediaType -> ByteString -> Either String a #

Variant which is given the actual `MediaType` provided by the other party.

In the most cases you don't want to branch based on the `MediaType`. See pr552 for a motivating example.

#### Instances

Instances details

FromForm a => MimeUnrender FormUrlEncoded a # | `urlDecodeAsForm` Note that the `mimeUnrender p (mimeRender p x) == Right x` law only holds if every element of x is non-null (i.e., not `("", "")`)
Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String a # mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String a #
FromJSON a => MimeUnrender JSON a # | `eitherDecode`
Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy JSON -> ByteString -> Either String a # mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String a #

MimeUnrender OctetStream ByteString #

    Right . toStrict

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString #

MimeUnrender OctetStream ByteString #

    Right . id

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString #

MimeUnrender PlainText Text #

    left show . TextS.decodeUtf8' . toStrict

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text #

MimeUnrender PlainText Text #

    left show . TextL.decodeUtf8'

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text #

MimeUnrender PlainText String #

    Right . BC.unpack

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String String # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String String #
MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String (WithStatus _status a) #
MimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy JSON -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String (WithStatus _status a) #
MimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String (WithStatus _status a) #
MimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String (WithStatus _status a) #

data NoContent #

A type for responses without content-body.

Constructors

NoContent |

#### Instances

Instances details

NFData NoContent # |
Instance details Defined in Servant.API.ContentTypes Methods rnf :: NoContent -> () #
Generic NoContent # |

Instance details

Defined in Servant.API.ContentTypes

Associated Types

type Rep NoContent |
Instance details Defined in Servant.API.ContentTypes type Rep NoContent = D1 ('MetaData "NoContent" "Servant.API.ContentTypes" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (C1 ('MetaCons "NoContent" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: NoContent -> Rep NoContent x #

to :: Rep NoContent x -> NoContent #

Read NoContent # |
Instance details Defined in Servant.API.ContentTypes Methods readsPrec :: Int -> ReadS NoContent # readList :: ReadS [NoContent] # readPrec :: ReadPrec NoContent # readListPrec :: ReadPrec [NoContent] #
Show NoContent # |
Instance details Defined in Servant.API.ContentTypes Methods showsPrec :: Int -> NoContent -> ShowS # show :: NoContent -> String # showList :: [NoContent] -> ShowS #
Eq NoContent # |
Instance details Defined in Servant.API.ContentTypes Methods (==) :: NoContent -> NoContent -> Bool # (/=) :: NoContent -> NoContent -> Bool #
HasStatus NoContent # | If an API can respond with `NoContent` we assume that this will happen with the status code 204 No Content. If this needs to be overridden, `WithStatus` can be used.

Instance details

Defined in Servant.API.UVerb

Associated Types

type StatusOf NoContent |
Instance details Defined in Servant.API.UVerb type StatusOf NoContent = 204

AllMime (ctyp ': (ctyp' ': ctyps)) => AllMimeRender (ctyp ': (ctyp' ': ctyps)) NoContent # |
Instance details Defined in Servant.API.ContentTypes Methods allMimeRender :: Proxy (ctyp ': (ctyp' ': ctyps)) -> NoContent -> [(MediaType, ByteString)] #
Accept ctyp => AllMimeRender '[ctyp] NoContent # |
Instance details Defined in Servant.API.ContentTypes Methods allMimeRender :: Proxy '[ctyp] -> NoContent -> [(MediaType, ByteString)] #
type Rep NoContent # |
Instance details Defined in Servant.API.ContentTypes type Rep NoContent = D1 ('MetaData "NoContent" "Servant.API.ContentTypes" "servant-0.20.2-9fHyWNA72dIEEHjgDnkpGL" 'False) (C1 ('MetaCons "NoContent" 'PrefixI 'False) (U1 :: Type -> Type))
type StatusOf NoContent # |
Instance details Defined in Servant.API.UVerb type StatusOf NoContent = 204

data OctetStream #

#### Instances

Instances details

Accept OctetStream #

    application/octet-stream

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy OctetStream -> MediaType # contentTypes :: Proxy OctetStream -> NonEmpty MediaType #
MimeRender OctetStream ByteString # | `fromStrict`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy OctetStream -> ByteString -> ByteString #

MimeRender OctetStream ByteString #

    id

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy OctetStream -> ByteString -> ByteString #

MimeUnrender OctetStream ByteString #

    Right . toStrict

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString #

MimeUnrender OctetStream ByteString #

    Right . id

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString #
MimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy OctetStream -> WithStatus _status a -> ByteString #
MimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String (WithStatus _status a) #

data PlainText #

#### Instances

Instances details

Accept PlainText #

    text/plain;charset=utf-8

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy PlainText -> MediaType # contentTypes :: Proxy PlainText -> NonEmpty MediaType #

MimeRender PlainText Text #

    fromStrict . TextS.encodeUtf8

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> Text -> ByteString #
MimeRender PlainText Text # | `encodeUtf8`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> Text -> ByteString #

MimeRender PlainText String #

    BC.pack

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> String -> ByteString #

MimeUnrender PlainText Text #

    left show . TextS.decodeUtf8' . toStrict

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text #

MimeUnrender PlainText Text #

    left show . TextL.decodeUtf8'

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text #

MimeUnrender PlainText String #

    Right . BC.unpack

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String String # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String String #
MimeRender PlainText a => MimeRender PlainText (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeRender :: Proxy PlainText -> WithStatus _status a -> ByteString #
MimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a) # |
Instance details Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String (WithStatus _status a) # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String (WithStatus _status a) #

Serializing and deserializing types based on `Accept` and `Content-Type` headers.

# Response Headers

data ResponseHeader (sym :: Symbol) a #

Constructors

Header a |
MissingHeader |
UndecodableHeader ByteString |

#### Instances

Instances details

Functor (ResponseHeader sym) # |
Instance details Defined in Servant.API.ResponseHeaders Methods fmap :: (a -> b) -> ResponseHeader sym a -> ResponseHeader sym b # (<$) :: a -> ResponseHeader sym b -> ResponseHeader sym a #
NFData a => NFData (ResponseHeader sym a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods rnf :: ResponseHeader sym a -> () #
Show a => Show (ResponseHeader sym a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods showsPrec :: Int -> ResponseHeader sym a -> ShowS # show :: ResponseHeader sym a -> String # showList :: [ResponseHeader sym a] -> ShowS #
Eq a => Eq (ResponseHeader sym a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods (==) :: ResponseHeader sym a -> ResponseHeader sym a -> Bool # (/=) :: ResponseHeader sym a -> ResponseHeader sym a -> Bool #

class AddHeader (mods :: [Type]) (h :: Symbol) v orig new | mods h v orig -> new, new -> mods, new -> h, new -> v, new -> orig #

Minimal complete definition

addOptionalHeader

#### Instances

Instances details

(KnownSymbol h, ToHttpApiData v, new ~ Headers '[Header' mods h v] a) => AddHeader mods h v a new # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> a -> new
(AddHeader mods h v old new, AddHeader mods h v (Union oldrest) (Union newrest), oldrest ~ (a ': as), newrest ~ (b ': bs)) => AddHeader mods h v (Union (old ': (a ': as))) (Union (new ': (b ': bs))) # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Union (old ': (a ': as)) -> Union (new ': (b ': bs))
AddHeader mods h v old new => AddHeader mods h v (Union '[old]) (Union '[new]) # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Union '[old] -> Union '[new]
(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': (fst ': rest)) a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header' mods h v ': (fst ': rest)) a

class BuildHeadersTo (hs :: [Type]) where #

Methods

buildHeadersTo :: [Header] -> HList hs #

#### Instances

Instances details

BuildHeadersTo ('[] :: [Type]) # |
Instance details Defined in Servant.API.ResponseHeaders Methods buildHeadersTo :: [Header] -> HList ('[] :: [Type]) #
(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header' mods h v ': xs) # |
Instance details Defined in Servant.API.ResponseHeaders Methods buildHeadersTo :: [Header] -> HList (Header' mods h v ': xs) #

class GetHeaders ls where #

Methods

getHeaders :: ls -> [Header] #

#### Instances

Instances details

GetHeadersFromHList hs => GetHeaders (HList hs) # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders :: HList hs -> [Header] #
GetHeaders' hs => GetHeaders (Headers hs a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders :: Headers hs a -> [Header] #

data HList (a :: [Type]) where #

Constructors

HNil :: HList ('[] :: [Type]) |
HCons :: forall (h :: Symbol) x (xs :: [Type]) (mods :: [Type]). ResponseHeader h x -> HList xs -> HList (Header' mods h x ': xs) |

#### Instances

Instances details

NFDataHList xs => NFData (HList xs) # |
Instance details Defined in Servant.API.ResponseHeaders Methods rnf :: HList xs -> () #
GetHeadersFromHList hs => GetHeaders (HList hs) # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders :: HList hs -> [Header] #

class HasResponseHeader (h :: Symbol) a (headers :: [Type]) #

Minimal complete definition

hlistLookupHeader

#### Instances

Instances details

HasResponseHeader h a (Header' mods h a ': rest) # |
Instance details Defined in Servant.API.ResponseHeaders Methods hlistLookupHeader :: HList (Header' mods h a ': rest) -> ResponseHeader h a
HasResponseHeader h a rest => HasResponseHeader h a (first ': rest) # |
Instance details Defined in Servant.API.ResponseHeaders Methods hlistLookupHeader :: HList (first ': rest) -> ResponseHeader h a

data Headers (ls :: [Type]) a #

Response Header objects. You should never need to construct one directly. Instead, use `addOptionalHeader`.

Constructors

Headers |

Fields

- getResponse :: a

  The underlying value of a `Headers`

- getHeadersHList :: HList ls

  HList of headers.

#### Instances

Instances details

(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': (fst ': rest)) a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header' mods h v ': (fst ': rest)) a
Functor (Headers ls) # |
Instance details Defined in Servant.API.ResponseHeaders Methods fmap :: (a -> b) -> Headers ls a -> Headers ls b # (<$) :: a -> Headers ls b -> Headers ls a #
(NFDataHList ls, NFData a) => NFData (Headers ls a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods rnf :: Headers ls a -> () #
GetHeaders' hs => GetHeaders (Headers hs a) # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders :: Headers hs a -> [Header] #
HasStatus a => HasStatus (Headers ls a) # |

Instance details

Defined in Servant.API.UVerb

Associated Types

type StatusOf (Headers ls a) |
Instance details Defined in Servant.API.UVerb type StatusOf (Headers ls a) = StatusOf a

type StatusOf (Headers ls a) # |
Instance details Defined in Servant.API.UVerb type StatusOf (Headers ls a) = StatusOf a

addHeader :: forall (h :: Symbol) v orig new. AddHeader '[Optional, Strict] h v orig new => v -> orig -> new #

`addHeader` adds a header to a response. Note that it changes the type of the value in the following ways:

1. A simple value is wrapped in "Headers '[hdr]":

    >>> let example0 = addHeader 5 "hi" :: Headers '[Header "someheader" Int] String;
    >>> getHeaders example0
    [("someheader","5")]

1. A value that already has a header has its new header *prepended* to the existing list:

    >>> let example1 = addHeader 5 "hi" :: Headers '[Header "someheader" Int] String;
    >>> let example2 = addHeader True example1 :: Headers '[Header "1st" Bool, Header "someheader" Int] String
    >>> getHeaders example2
    [("1st","true"),("someheader","5")]

Note that while in your handlers type annotations are not required, since the type can be inferred from the API type, in other cases you may find yourself needing to add annotations.

addHeader' :: forall (mods :: [Type]) (h :: Symbol) v orig new. AddHeader mods h v orig new => v -> orig -> new #

Same as `addHeader` but works with `Header'`, so it's possible to use any `mods`.

lookupResponseHeader :: forall (h :: Symbol) a (headers :: [Type]) r. HasResponseHeader h a headers => Headers headers r -> ResponseHeader h a #

Look up a specific ResponseHeader, without having to know what position it is in the HList.

    >>> let example1 = addHeader 5 "hi" :: Headers '[Header "someheader" Int] String
    >>> let example2 = addHeader True example1 :: Headers '[Header "1st" Bool, Header "someheader" Int] String
    >>> lookupResponseHeader example2 :: ResponseHeader "someheader" Int
    Header 5

    >>> lookupResponseHeader example2 :: ResponseHeader "1st" Bool
    Header True

Usage of this function relies on an explicit type annotation of the header to be looked up. This can be done with type annotations on the result, or with an explicit type application. In this example, the type of header value is determined by the type-inference, we only specify the name of the header:

    >>> :set -XTypeApplications
    >>> case lookupResponseHeader @"1st" example2 of { Header b -> b ; _ -> False }
    True

Since: 0.15

noHeader :: forall (h :: Symbol) v orig new. AddHeader '[Optional, Strict] h v orig new => orig -> new #

Deliberately do not add a header to a value.

    >>> let example1 = noHeader "hi" :: Headers '[Header "someheader" Int] String
    >>> getHeaders example1
    []

noHeader' :: forall (mods :: [Type]) (h :: Symbol) v orig new. AddHeader mods h v orig new => orig -> new #

Same as `noHeader` but works with `Header'`, so it's possible to use any `mods`.

# Untyped endpoints

module Servant.API.Raw

Plugging in a wai `Application`, serving directories

# FromHttpApiData and ToHttpApiData

class FromHttpApiData a where #

Parse value from HTTP API data.

WARNING: Do not derive this using `DeriveAnyClass` as the generated instance will loop indefinitely.

Minimal complete definition

parseUrlPiece | parseQueryParam

Methods

parseUrlPiece :: Text -> Either Text a #

Parse URL path piece.

parseHeader :: ByteString -> Either Text a #

Parse HTTP header value.

parseQueryParam :: Text -> Either Text a #

Parse query param value.

#### Instances

Instances details

FromHttpApiData SetCookie

Note: this instance works correctly for alphanumeric name and value

    >>> parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
    Right (SetCookie {setCookieName = "SESSID", setCookieValue = "r2t5uvjq435r4q7ib3vtdjq120", setCookiePath = Nothing, setCookieExpires = Nothing, setCookieMaxAge = Nothing, setCookieDomain = Nothing, setCookieHttpOnly = False, setCookieSecure = False, setCookieSameSite = Nothing})

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text SetCookie # parseHeader :: ByteString -> Either Text SetCookie # parseQueryParam :: Text -> Either Text SetCookie #
FromHttpApiData Void | Parsing a ``Void`` value is always an error, considering ``Void`` as a data type with no constructors.
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Void # parseHeader :: ByteString -> Either Text Void # parseQueryParam :: Text -> Either Text Void #
FromHttpApiData All |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text All # parseHeader :: ByteString -> Either Text All # parseQueryParam :: Text -> Either Text All #
FromHttpApiData Any |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Any # parseHeader :: ByteString -> Either Text Any # parseQueryParam :: Text -> Either Text Any #

FromHttpApiData Version

    >>> showVersion <$> parseUrlPiece "1.2.3"
    Right "1.2.3"

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Version # parseHeader :: ByteString -> Either Text Version # parseQueryParam :: Text -> Either Text Version #
FromHttpApiData Int16 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int16 # parseHeader :: ByteString -> Either Text Int16 # parseQueryParam :: Text -> Either Text Int16 #
FromHttpApiData Int32 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int32 # parseHeader :: ByteString -> Either Text Int32 # parseQueryParam :: Text -> Either Text Int32 #
FromHttpApiData Int64 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int64 # parseHeader :: ByteString -> Either Text Int64 # parseQueryParam :: Text -> Either Text Int64 #
FromHttpApiData Int8 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int8 # parseHeader :: ByteString -> Either Text Int8 # parseQueryParam :: Text -> Either Text Int8 #
FromHttpApiData Word16 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word16 # parseHeader :: ByteString -> Either Text Word16 # parseQueryParam :: Text -> Either Text Word16 #
FromHttpApiData Word32 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word32 # parseHeader :: ByteString -> Either Text Word32 # parseQueryParam :: Text -> Either Text Word32 #
FromHttpApiData Word64 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word64 # parseHeader :: ByteString -> Either Text Word64 # parseQueryParam :: Text -> Either Text Word64 #
FromHttpApiData Word8 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word8 # parseHeader :: ByteString -> Either Text Word8 # parseQueryParam :: Text -> Either Text Word8 #
FromHttpApiData Ordering |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Ordering # parseHeader :: ByteString -> Either Text Ordering # parseQueryParam :: Text -> Either Text Ordering #
FromHttpApiData Text |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Text # parseHeader :: ByteString -> Either Text Text # parseQueryParam :: Text -> Either Text Text #
FromHttpApiData Text |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Text # parseHeader :: ByteString -> Either Text Text # parseQueryParam :: Text -> Either Text Text #

FromHttpApiData Day

    >>> toGregorian <$> parseUrlPiece "2016-12-01"
    Right (2016,12,1)

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Day # parseHeader :: ByteString -> Either Text Day # parseQueryParam :: Text -> Either Text Day #

FromHttpApiData Month

    >>> parseUrlPiece "2021-01" :: Either Text Month
    Right 2021-01

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Month # parseHeader :: ByteString -> Either Text Month # parseQueryParam :: Text -> Either Text Month #

FromHttpApiData Quarter

    >>> parseUrlPiece "2021-q1" :: Either Text Quarter
    Right 2021-Q1

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Quarter # parseHeader :: ByteString -> Either Text Quarter # parseQueryParam :: Text -> Either Text Quarter #

FromHttpApiData QuarterOfYear

    >>> parseUrlPiece "q2" :: Either Text QuarterOfYear
    Right Q2

    >>> parseUrlPiece "Q3" :: Either Text QuarterOfYear
    Right Q3

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text QuarterOfYear # parseHeader :: ByteString -> Either Text QuarterOfYear # parseQueryParam :: Text -> Either Text QuarterOfYear #

FromHttpApiData DayOfWeek

    >>> parseUrlPiece "Monday" :: Either Text DayOfWeek
    Right Monday

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text DayOfWeek # parseHeader :: ByteString -> Either Text DayOfWeek # parseQueryParam :: Text -> Either Text DayOfWeek #
FromHttpApiData NominalDiffTime |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text NominalDiffTime # parseHeader :: ByteString -> Either Text NominalDiffTime # parseQueryParam :: Text -> Either Text NominalDiffTime #

FromHttpApiData UTCTime

    >>> parseUrlPiece "2015-10-03T00:14:24Z" :: Either Text UTCTime
    Right 2015-10-03 00:14:24 UTC

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text UTCTime # parseHeader :: ByteString -> Either Text UTCTime # parseQueryParam :: Text -> Either Text UTCTime #

FromHttpApiData LocalTime

    >>> parseUrlPiece "2015-10-03T14:55:01" :: Either Text LocalTime
    Right 2015-10-03 14:55:01

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text LocalTime # parseHeader :: ByteString -> Either Text LocalTime # parseQueryParam :: Text -> Either Text LocalTime #

FromHttpApiData TimeOfDay

    >>> parseUrlPiece "14:55:01.333" :: Either Text TimeOfDay
    Right 14:55:01.333

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text TimeOfDay # parseHeader :: ByteString -> Either Text TimeOfDay # parseQueryParam :: Text -> Either Text TimeOfDay #

FromHttpApiData ZonedTime

    >>> parseUrlPiece "2015-10-03T14:55:01+0000" :: Either Text ZonedTime
    Right 2015-10-03 14:55:01 +0000

    >>> parseQueryParam "2016-12-31T01:00:00Z" :: Either Text ZonedTime
    Right 2016-12-31 01:00:00 +0000

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text ZonedTime # parseHeader :: ByteString -> Either Text ZonedTime # parseQueryParam :: Text -> Either Text ZonedTime #
FromHttpApiData UUID |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text UUID # parseHeader :: ByteString -> Either Text UUID # parseQueryParam :: Text -> Either Text UUID #
FromHttpApiData Integer |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Integer # parseHeader :: ByteString -> Either Text Integer # parseQueryParam :: Text -> Either Text Integer #
FromHttpApiData Natural |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Natural # parseHeader :: ByteString -> Either Text Natural # parseQueryParam :: Text -> Either Text Natural #
FromHttpApiData String |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text String # parseHeader :: ByteString -> Either Text String # parseQueryParam :: Text -> Either Text String #

FromHttpApiData ()

    >>> parseUrlPiece "_" :: Either Text ()
    Right ()

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text () # parseHeader :: ByteString -> Either Text () # parseQueryParam :: Text -> Either Text () #
FromHttpApiData Bool |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Bool # parseHeader :: ByteString -> Either Text Bool # parseQueryParam :: Text -> Either Text Bool #
FromHttpApiData Char |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Char # parseHeader :: ByteString -> Either Text Char # parseQueryParam :: Text -> Either Text Char #
FromHttpApiData Double |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Double # parseHeader :: ByteString -> Either Text Double # parseQueryParam :: Text -> Either Text Double #
FromHttpApiData Float |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Float # parseHeader :: ByteString -> Either Text Float # parseQueryParam :: Text -> Either Text Float #
FromHttpApiData Int |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int # parseHeader :: ByteString -> Either Text Int # parseQueryParam :: Text -> Either Text Int #
FromHttpApiData Word |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word # parseHeader :: ByteString -> Either Text Word # parseQueryParam :: Text -> Either Text Word #
FromHttpApiData a => FromHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (First a) # parseHeader :: ByteString -> Either Text (First a) # parseQueryParam :: Text -> Either Text (First a) #
FromHttpApiData a => FromHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Last a) # parseHeader :: ByteString -> Either Text (Last a) # parseQueryParam :: Text -> Either Text (Last a) #
FromHttpApiData a => FromHttpApiData (Max a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Max a) # parseHeader :: ByteString -> Either Text (Max a) # parseQueryParam :: Text -> Either Text (Max a) #
FromHttpApiData a => FromHttpApiData (Min a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Min a) # parseHeader :: ByteString -> Either Text (Min a) # parseQueryParam :: Text -> Either Text (Min a) #
FromHttpApiData a => FromHttpApiData (Identity a) | Since: http-api-data-0.4.2
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Identity a) # parseHeader :: ByteString -> Either Text (Identity a) # parseQueryParam :: Text -> Either Text (Identity a) #
FromHttpApiData a => FromHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (First a) # parseHeader :: ByteString -> Either Text (First a) # parseQueryParam :: Text -> Either Text (First a) #
FromHttpApiData a => FromHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Last a) # parseHeader :: ByteString -> Either Text (Last a) # parseQueryParam :: Text -> Either Text (Last a) #
FromHttpApiData a => FromHttpApiData (Dual a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Dual a) # parseHeader :: ByteString -> Either Text (Dual a) # parseQueryParam :: Text -> Either Text (Dual a) #
FromHttpApiData a => FromHttpApiData (Product a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Product a) # parseHeader :: ByteString -> Either Text (Product a) # parseQueryParam :: Text -> Either Text (Product a) #
FromHttpApiData a => FromHttpApiData (Sum a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Sum a) # parseHeader :: ByteString -> Either Text (Sum a) # parseQueryParam :: Text -> Either Text (Sum a) #
FromHttpApiData a => FromHttpApiData (LenientData a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (LenientData a) # parseHeader :: ByteString -> Either Text (LenientData a) # parseQueryParam :: Text -> Either Text (LenientData a) #

FromHttpApiData a => FromHttpApiData (Maybe a)

    >>> parseUrlPiece "Just 123" :: Either Text (Maybe Int)
    Right (Just 123)

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Maybe a) # parseHeader :: ByteString -> Either Text (Maybe a) # parseQueryParam :: Text -> Either Text (Maybe a) #
HasResolution a => FromHttpApiData (Fixed a) | Note: this instance is not polykinded
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Fixed a) # parseHeader :: ByteString -> Either Text (Fixed a) # parseQueryParam :: Text -> Either Text (Fixed a) #

(FromHttpApiData a, FromHttpApiData b) => FromHttpApiData (Either a b)

    >>> parseUrlPiece "Right 123" :: Either Text (Either String Int)
    Right (Right 123)

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Either a b) # parseHeader :: ByteString -> Either Text (Either a b) # parseQueryParam :: Text -> Either Text (Either a b) #
FromHttpApiData a => FromHttpApiData (Const a b) | Since: http-api-data-0.4.2
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Const a b) # parseHeader :: ByteString -> Either Text (Const a b) # parseQueryParam :: Text -> Either Text (Const a b) #
FromHttpApiData a => FromHttpApiData (Tagged b a) | Note: this instance is not polykinded
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Tagged b a) # parseHeader :: ByteString -> Either Text (Tagged b a) # parseQueryParam :: Text -> Either Text (Tagged b a) #

class ToHttpApiData a where #

Convert value to HTTP API data.

WARNING: Do not derive this using `DeriveAnyClass` as the generated instance will loop indefinitely.

Minimal complete definition

toUrlPiece | toQueryParam

Methods

toUrlPiece :: a -> Text #

Convert to URL path piece.

toEncodedUrlPiece :: a -> Builder #

Convert to a URL path piece, making sure to encode any special chars. The default definition uses ``urlEncodeBuilder` `False`` but this may be overriden with a more efficient version.

toHeader :: a -> ByteString #

Convert to HTTP header value.

toQueryParam :: a -> Text #

Convert to query param value.

toEncodedQueryParam :: a -> Builder #

Convert to URL query param, The default definition uses ``urlEncodeBuilder` `True`` but this may be overriden with a more efficient version.

Since: http-api-data-0.5.1

#### Instances

Instances details

ToHttpApiData SetCookie

Note: this instance works correctly for alphanumeric name and value

    >>> let Right c = parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie
    >>> toUrlPiece c
    "SESSID=r2t5uvjq435r4q7ib3vtdjq120"

    >>> toHeader c
    "SESSID=r2t5uvjq435r4q7ib3vtdjq120"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: SetCookie -> Text # toEncodedUrlPiece :: SetCookie -> Builder # toHeader :: SetCookie -> ByteString # toQueryParam :: SetCookie -> Text # toEncodedQueryParam :: SetCookie -> Builder #
ToHttpApiData Void |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Void -> Text # toEncodedUrlPiece :: Void -> Builder # toHeader :: Void -> ByteString # toQueryParam :: Void -> Text # toEncodedQueryParam :: Void -> Builder #
ToHttpApiData All |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: All -> Text # toEncodedUrlPiece :: All -> Builder # toHeader :: All -> ByteString # toQueryParam :: All -> Text # toEncodedQueryParam :: All -> Builder #
ToHttpApiData Any |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Any -> Text # toEncodedUrlPiece :: Any -> Builder # toHeader :: Any -> ByteString # toQueryParam :: Any -> Text # toEncodedQueryParam :: Any -> Builder #

ToHttpApiData Version

    >>> toUrlPiece (Version [1, 2, 3] [])
    "1.2.3"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Version -> Text # toEncodedUrlPiece :: Version -> Builder # toHeader :: Version -> ByteString # toQueryParam :: Version -> Text # toEncodedQueryParam :: Version -> Builder #
ToHttpApiData Int16 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int16 -> Text # toEncodedUrlPiece :: Int16 -> Builder # toHeader :: Int16 -> ByteString # toQueryParam :: Int16 -> Text # toEncodedQueryParam :: Int16 -> Builder #
ToHttpApiData Int32 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int32 -> Text # toEncodedUrlPiece :: Int32 -> Builder # toHeader :: Int32 -> ByteString # toQueryParam :: Int32 -> Text # toEncodedQueryParam :: Int32 -> Builder #
ToHttpApiData Int64 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int64 -> Text # toEncodedUrlPiece :: Int64 -> Builder # toHeader :: Int64 -> ByteString # toQueryParam :: Int64 -> Text # toEncodedQueryParam :: Int64 -> Builder #
ToHttpApiData Int8 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int8 -> Text # toEncodedUrlPiece :: Int8 -> Builder # toHeader :: Int8 -> ByteString # toQueryParam :: Int8 -> Text # toEncodedQueryParam :: Int8 -> Builder #
ToHttpApiData Word16 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word16 -> Text # toEncodedUrlPiece :: Word16 -> Builder # toHeader :: Word16 -> ByteString # toQueryParam :: Word16 -> Text # toEncodedQueryParam :: Word16 -> Builder #
ToHttpApiData Word32 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word32 -> Text # toEncodedUrlPiece :: Word32 -> Builder # toHeader :: Word32 -> ByteString # toQueryParam :: Word32 -> Text # toEncodedQueryParam :: Word32 -> Builder #
ToHttpApiData Word64 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word64 -> Text # toEncodedUrlPiece :: Word64 -> Builder # toHeader :: Word64 -> ByteString # toQueryParam :: Word64 -> Text # toEncodedQueryParam :: Word64 -> Builder #
ToHttpApiData Word8 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word8 -> Text # toEncodedUrlPiece :: Word8 -> Builder # toHeader :: Word8 -> ByteString # toQueryParam :: Word8 -> Text # toEncodedQueryParam :: Word8 -> Builder #
ToHttpApiData Ordering |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Ordering -> Text # toEncodedUrlPiece :: Ordering -> Builder # toHeader :: Ordering -> ByteString # toQueryParam :: Ordering -> Text # toEncodedQueryParam :: Ordering -> Builder #
ToHttpApiData Link # |
Instance details Defined in Servant.Links Methods toUrlPiece :: Link -> Text # toEncodedUrlPiece :: Link -> Builder # toHeader :: Link -> ByteString # toQueryParam :: Link -> Text # toEncodedQueryParam :: Link -> Builder #
ToHttpApiData Text |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Text -> Text # toEncodedUrlPiece :: Text -> Builder # toHeader :: Text -> ByteString # toQueryParam :: Text -> Text # toEncodedQueryParam :: Text -> Builder #
ToHttpApiData Text |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Text -> Text # toEncodedUrlPiece :: Text -> Builder # toHeader :: Text -> ByteString # toQueryParam :: Text -> Text # toEncodedQueryParam :: Text -> Builder #

ToHttpApiData Day

    >>> toUrlPiece (fromGregorian 2015 10 03)
    "2015-10-03"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Day -> Text # toEncodedUrlPiece :: Day -> Builder # toHeader :: Day -> ByteString # toQueryParam :: Day -> Text # toEncodedQueryParam :: Day -> Builder #

ToHttpApiData Month

    >>> import Data.Time.Calendar.Month.Compat (Month (..))
    >>> MkMonth 24482
    2040-03

    >>> toUrlPiece $ MkMonth 24482
    "2040-03"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Month -> Text # toEncodedUrlPiece :: Month -> Builder # toHeader :: Month -> ByteString # toQueryParam :: Month -> Text # toEncodedQueryParam :: Month -> Builder #

ToHttpApiData Quarter

    >>> import Data.Time.Calendar.Quarter.Compat (Quarter (..))
    >>> MkQuarter 8040
    2010-Q1

    >>> toUrlPiece $ MkQuarter 8040
    "2010-q1"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Quarter -> Text # toEncodedUrlPiece :: Quarter -> Builder # toHeader :: Quarter -> ByteString # toQueryParam :: Quarter -> Text # toEncodedQueryParam :: Quarter -> Builder #

ToHttpApiData QuarterOfYear

    >>> toUrlPiece Q4
    "q4"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: QuarterOfYear -> Text # toEncodedUrlPiece :: QuarterOfYear -> Builder # toHeader :: QuarterOfYear -> ByteString # toQueryParam :: QuarterOfYear -> Text # toEncodedQueryParam :: QuarterOfYear -> Builder #

ToHttpApiData DayOfWeek

    >>> toUrlPiece Monday
    "monday"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: DayOfWeek -> Text # toEncodedUrlPiece :: DayOfWeek -> Builder # toHeader :: DayOfWeek -> ByteString # toQueryParam :: DayOfWeek -> Text # toEncodedQueryParam :: DayOfWeek -> Builder #
ToHttpApiData NominalDiffTime |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: NominalDiffTime -> Text # toEncodedUrlPiece :: NominalDiffTime -> Builder # toHeader :: NominalDiffTime -> ByteString # toQueryParam :: NominalDiffTime -> Text # toEncodedQueryParam :: NominalDiffTime -> Builder #

ToHttpApiData UTCTime

    >>> toUrlPiece $ UTCTime (fromGregorian 2015 10 03) 864.5
    "2015-10-03T00:14:24.500Z"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: UTCTime -> Text # toEncodedUrlPiece :: UTCTime -> Builder # toHeader :: UTCTime -> ByteString # toQueryParam :: UTCTime -> Text # toEncodedQueryParam :: UTCTime -> Builder #

ToHttpApiData LocalTime

    >>> toUrlPiece $ LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 21.687)
    "2015-10-03T14:55:21.687"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: LocalTime -> Text # toEncodedUrlPiece :: LocalTime -> Builder # toHeader :: LocalTime -> ByteString # toQueryParam :: LocalTime -> Text # toEncodedQueryParam :: LocalTime -> Builder #

ToHttpApiData TimeOfDay

    >>> toUrlPiece $ TimeOfDay 14 55 23.1
    "14:55:23.100"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: TimeOfDay -> Text # toEncodedUrlPiece :: TimeOfDay -> Builder # toHeader :: TimeOfDay -> ByteString # toQueryParam :: TimeOfDay -> Text # toEncodedQueryParam :: TimeOfDay -> Builder #

ToHttpApiData ZonedTime

    >>> toUrlPiece $ ZonedTime (LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 51.001)) utc
    "2015-10-03T14:55:51.001Z"

    >>> toUrlPiece $ ZonedTime (LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 51.001)) (TimeZone 120 True "EET")
    "2015-10-03T14:55:51.001+02:00"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: ZonedTime -> Text # toEncodedUrlPiece :: ZonedTime -> Builder # toHeader :: ZonedTime -> ByteString # toQueryParam :: ZonedTime -> Text # toEncodedQueryParam :: ZonedTime -> Builder #
ToHttpApiData UUID |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: UUID -> Text # toEncodedUrlPiece :: UUID -> Builder # toHeader :: UUID -> ByteString # toQueryParam :: UUID -> Text # toEncodedQueryParam :: UUID -> Builder #
ToHttpApiData Integer |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Integer -> Text # toEncodedUrlPiece :: Integer -> Builder # toHeader :: Integer -> ByteString # toQueryParam :: Integer -> Text # toEncodedQueryParam :: Integer -> Builder #
ToHttpApiData Natural |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Natural -> Text # toEncodedUrlPiece :: Natural -> Builder # toHeader :: Natural -> ByteString # toQueryParam :: Natural -> Text # toEncodedQueryParam :: Natural -> Builder #
ToHttpApiData String |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: String -> Text # toEncodedUrlPiece :: String -> Builder # toHeader :: String -> ByteString # toQueryParam :: String -> Text # toEncodedQueryParam :: String -> Builder #

ToHttpApiData ()

    >>> toUrlPiece ()
    "_"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: () -> Text # toEncodedUrlPiece :: () -> Builder # toHeader :: () -> ByteString # toQueryParam :: () -> Text # toEncodedQueryParam :: () -> Builder #
ToHttpApiData Bool |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Bool -> Text # toEncodedUrlPiece :: Bool -> Builder # toHeader :: Bool -> ByteString # toQueryParam :: Bool -> Text # toEncodedQueryParam :: Bool -> Builder #
ToHttpApiData Char |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Char -> Text # toEncodedUrlPiece :: Char -> Builder # toHeader :: Char -> ByteString # toQueryParam :: Char -> Text # toEncodedQueryParam :: Char -> Builder #
ToHttpApiData Double |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Double -> Text # toEncodedUrlPiece :: Double -> Builder # toHeader :: Double -> ByteString # toQueryParam :: Double -> Text # toEncodedQueryParam :: Double -> Builder #
ToHttpApiData Float |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Float -> Text # toEncodedUrlPiece :: Float -> Builder # toHeader :: Float -> ByteString # toQueryParam :: Float -> Text # toEncodedQueryParam :: Float -> Builder #
ToHttpApiData Int |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int -> Text # toEncodedUrlPiece :: Int -> Builder # toHeader :: Int -> ByteString # toQueryParam :: Int -> Text # toEncodedQueryParam :: Int -> Builder #
ToHttpApiData Word |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word -> Text # toEncodedUrlPiece :: Word -> Builder # toHeader :: Word -> ByteString # toQueryParam :: Word -> Text # toEncodedQueryParam :: Word -> Builder #
ToHttpApiData a => ToHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: First a -> Text # toEncodedUrlPiece :: First a -> Builder # toHeader :: First a -> ByteString # toQueryParam :: First a -> Text # toEncodedQueryParam :: First a -> Builder #
ToHttpApiData a => ToHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Last a -> Text # toEncodedUrlPiece :: Last a -> Builder # toHeader :: Last a -> ByteString # toQueryParam :: Last a -> Text # toEncodedQueryParam :: Last a -> Builder #
ToHttpApiData a => ToHttpApiData (Max a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Max a -> Text # toEncodedUrlPiece :: Max a -> Builder # toHeader :: Max a -> ByteString # toQueryParam :: Max a -> Text # toEncodedQueryParam :: Max a -> Builder #
ToHttpApiData a => ToHttpApiData (Min a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Min a -> Text # toEncodedUrlPiece :: Min a -> Builder # toHeader :: Min a -> ByteString # toQueryParam :: Min a -> Text # toEncodedQueryParam :: Min a -> Builder #
ToHttpApiData a => ToHttpApiData (Identity a) | Since: http-api-data-0.4.2
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Identity a -> Text # toEncodedUrlPiece :: Identity a -> Builder # toHeader :: Identity a -> ByteString # toQueryParam :: Identity a -> Text # toEncodedQueryParam :: Identity a -> Builder #
ToHttpApiData a => ToHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: First a -> Text # toEncodedUrlPiece :: First a -> Builder # toHeader :: First a -> ByteString # toQueryParam :: First a -> Text # toEncodedQueryParam :: First a -> Builder #
ToHttpApiData a => ToHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Last a -> Text # toEncodedUrlPiece :: Last a -> Builder # toHeader :: Last a -> ByteString # toQueryParam :: Last a -> Text # toEncodedQueryParam :: Last a -> Builder #
ToHttpApiData a => ToHttpApiData (Dual a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Dual a -> Text # toEncodedUrlPiece :: Dual a -> Builder # toHeader :: Dual a -> ByteString # toQueryParam :: Dual a -> Text # toEncodedQueryParam :: Dual a -> Builder #
ToHttpApiData a => ToHttpApiData (Product a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Product a -> Text # toEncodedUrlPiece :: Product a -> Builder # toHeader :: Product a -> ByteString # toQueryParam :: Product a -> Text # toEncodedQueryParam :: Product a -> Builder #
ToHttpApiData a => ToHttpApiData (Sum a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Sum a -> Text # toEncodedUrlPiece :: Sum a -> Builder # toHeader :: Sum a -> ByteString # toQueryParam :: Sum a -> Text # toEncodedQueryParam :: Sum a -> Builder #

ToHttpApiData a => ToHttpApiData (Maybe a)

    >>> toUrlPiece (Just "Hello")
    "just Hello"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Maybe a -> Text # toEncodedUrlPiece :: Maybe a -> Builder # toHeader :: Maybe a -> ByteString # toQueryParam :: Maybe a -> Text # toEncodedQueryParam :: Maybe a -> Builder #
HasResolution a => ToHttpApiData (Fixed a) | Note: this instance is not polykinded
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Fixed a -> Text # toEncodedUrlPiece :: Fixed a -> Builder # toHeader :: Fixed a -> ByteString # toQueryParam :: Fixed a -> Text # toEncodedQueryParam :: Fixed a -> Builder #

(ToHttpApiData a, ToHttpApiData b) => ToHttpApiData (Either a b)

    >>> toUrlPiece (Left "err" :: Either String Int)
    "left err"
    >>> toUrlPiece (Right 3 :: Either String Int)
    "right 3"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Either a b -> Text # toEncodedUrlPiece :: Either a b -> Builder # toHeader :: Either a b -> ByteString # toQueryParam :: Either a b -> Text # toEncodedQueryParam :: Either a b -> Builder #
ToHttpApiData a => ToHttpApiData (Const a b) | Since: http-api-data-0.4.2
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Const a b -> Text # toEncodedUrlPiece :: Const a b -> Builder # toHeader :: Const a b -> ByteString # toQueryParam :: Const a b -> Text # toEncodedQueryParam :: Const a b -> Builder #
ToHttpApiData a => ToHttpApiData (Tagged b a) | Note: this instance is not polykinded
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Tagged b a -> Text # toEncodedUrlPiece :: Tagged b a -> Builder # toHeader :: Tagged b a -> ByteString # toQueryParam :: Tagged b a -> Text # toEncodedQueryParam :: Tagged b a -> Builder #

Classes and instances for types that can be converted to and from HTTP API data.

# Experimental modules

module Servant.API.Experimental.Auth

General Authentication

# Links

data URI #

Represents a general universal resource identifier using its component parts.

For example, for the URI

      foo://anonymous@www.haskell.org:42/ghc?query#frag

the components are:

Constructors

URI |

Fields

- uriScheme :: String

      foo:

- uriAuthority :: Maybe URIAuth

      //anonymous@www.haskell.org:42

- uriPath :: String

      /ghc

- uriQuery :: String

      ?query

- uriFragment :: String

      #frag

#### Instances

Instances details

FromJSON URI | Since: aeson-2.2.0.0
Instance details Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser URI # parseJSONList :: Value -> Parser [URI] # omittedField :: Maybe URI #
FromJSONKey URI | Since: aeson-2.2.0.0
Instance details Defined in Data.Aeson.Types.FromJSON Methods fromJSONKey :: FromJSONKeyFunction URI # fromJSONKeyList :: FromJSONKeyFunction [URI] #
ToJSON URI | Since: aeson-2.2.0.0
Instance details Defined in Data.Aeson.Types.ToJSON Methods toJSON :: URI -> Value # toEncoding :: URI -> Encoding # toJSONList :: [URI] -> Value # toEncodingList :: [URI] -> Encoding # omitField :: URI -> Bool #
ToJSONKey URI | Since: aeson-2.2.0.0
Instance details Defined in Data.Aeson.Types.ToJSON Methods toJSONKey :: ToJSONKeyFunction URI # toJSONKeyList :: ToJSONKeyFunction [URI] #
NFData URI |
Instance details Defined in Network.URI Methods rnf :: URI -> () #
Data URI |

Instance details

Defined in Network.URI

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> URI -> c URI #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c URI #

toConstr :: URI -> Constr #

dataTypeOf :: URI -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c URI) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c URI) #

gmapT :: (forall b. Data b => b -> b) -> URI -> URI #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> URI -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> URI -> r #

gmapQ :: (forall d. Data d => d -> u) -> URI -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> URI -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> URI -> m URI #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> URI -> m URI #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> URI -> m URI #

Generic URI |

Instance details

Defined in Network.URI

Associated Types

type Rep URI |

Instance details

Defined in Network.URI

type Rep URI = D1 ('MetaData "URI" "Network.URI" "network-uri-2.6.4.2-E8LVMJw3xhU27dwpt5eqVZ" 'False) (C1 ('MetaCons "URI" 'PrefixI 'True) ((S1 ('MetaSel ('Just "uriScheme") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just "uriAuthority") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe URIAuth))) :*: (S1 ('MetaSel ('Just "uriPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: (S1 ('MetaSel ('Just "uriQuery") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just "uriFragment") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))))

Methods

from :: URI -> Rep URI x #

to :: Rep URI x -> URI #

Show URI |
Instance details Defined in Network.URI Methods showsPrec :: Int -> URI -> ShowS # show :: URI -> String # showList :: [URI] -> ShowS #
Eq URI |
Instance details Defined in Network.URI Methods (==) :: URI -> URI -> Bool # (/=) :: URI -> URI -> Bool #
Ord URI |
Instance details Defined in Network.URI Methods compare :: URI -> URI -> Ordering # (<) :: URI -> URI -> Bool # (<=) :: URI -> URI -> Bool # (>) :: URI -> URI -> Bool # (>=) :: URI -> URI -> Bool # max :: URI -> URI -> URI # min :: URI -> URI -> URI #
Lift URI |
Instance details Defined in Network.URI Methods lift :: Quote m => URI -> m Exp # liftTyped :: forall (m :: Type -> Type). Quote m => URI -> Code m URI #
type Rep URI |

Instance details

Defined in Network.URI

type Rep URI = D1 ('MetaData "URI" "Network.URI" "network-uri-2.6.4.2-E8LVMJw3xhU27dwpt5eqVZ" 'False) (C1 ('MetaCons "URI" 'PrefixI 'True) ((S1 ('MetaSel ('Just "uriScheme") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just "uriAuthority") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe URIAuth))) :*: (S1 ('MetaSel ('Just "uriPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: (S1 ('MetaSel ('Just "uriQuery") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just "uriFragment") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))))

class HasLink (endpoint :: k) where #

Construct a toLink for an endpoint.

Associated Types

type MkLink (endpoint :: k) a #

Methods

toLink #

Arguments

:: (Link -> a) |
-> Proxy endpoint | The API endpoint you would like to point to
-> Link |
-> MkLink endpoint a |

#### Instances

Instances details

HasLink EmptyAPI # |

Instance details

Defined in Servant.Links

Associated Types

type MkLink EmptyAPI a |
Instance details Defined in Servant.Links type MkLink EmptyAPI a = EmptyAPI

Methods

toLink :: (Link -> a) -> Proxy EmptyAPI -> Link -> MkLink EmptyAPI a #

HasLink Raw # |

Instance details

Defined in Servant.Links

Associated Types

type MkLink Raw a |
Instance details Defined in Servant.Links type MkLink Raw a = a

Methods

toLink :: (Link -> a) -> Proxy Raw -> Link -> MkLink Raw a #

HasLink RawM # |

Instance details

Defined in Servant.Links

Associated Types

type MkLink RawM a |
Instance details Defined in Servant.Links type MkLink RawM a = a

Methods

toLink :: (Link -> a) -> Proxy RawM -> Link -> MkLink RawM a #

(TypeError (NoInstanceFor (HasLink api)) :: Constraint) => HasLink (api :: k) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy api -> Link -> MkLink api a #
(HasLink (ToServantApi routes), forall a. GLink routes a, ErrorIfNoGeneric routes) => HasLink (NamedRoutes routes :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (NamedRoutes routes) -> Link -> MkLink (NamedRoutes routes) a #
(HasLink a, HasLink b) => HasLink (a :<|> b :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (a :<|> b) -> Link -> MkLink (a :<|> b) a0 #
HasLink (NoContentVerb m :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (NoContentVerb m) -> Link -> MkLink (NoContentVerb m) a #
(TypeError (PartialApplication (HasLink :: Type -> Constraint) arr) :: Constraint) => HasLink (arr :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (arr :> sub) -> Link -> MkLink (arr :> sub) a0 #
(KnownSymbol sym, HasLink sub) => HasLink (sym :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (sym :> sub) -> Link -> MkLink (sym :> sub) a #
HasLink sub => HasLink (HttpVersion :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (HttpVersion :> sub) -> Link -> MkLink (HttpVersion :> sub) a #
HasLink sub => HasLink (BasicAuth realm a :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (BasicAuth realm a :> sub) -> Link -> MkLink (BasicAuth realm a :> sub) a0 #
(ToHttpApiData v, HasLink sub) => HasLink (Capture' mods sym v :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (Capture' mods sym v :> sub) -> Link -> MkLink (Capture' mods sym v :> sub) a #
(ToHttpApiData v, HasLink sub) => HasLink (CaptureAll sym v :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (CaptureAll sym v :> sub) -> Link -> MkLink (CaptureAll sym v :> sub) a #
HasLink sub => HasLink (Description s :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (Description s :> sub) -> Link -> MkLink (Description s :> sub) a #
HasLink sub => HasLink (Summary s :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (Summary s :> sub) -> Link -> MkLink (Summary s :> sub) a #
HasLink sub => HasLink (AuthProtect tag :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (AuthProtect tag :> sub) -> Link -> MkLink (AuthProtect tag :> sub) a #
(HasLink sub, ToHttpApiData v) => HasLink (Fragment v :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (Fragment v :> sub) -> Link -> MkLink (Fragment v :> sub) a #
HasLink sub => HasLink (Header' mods sym a :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (Header' mods sym a :> sub) -> Link -> MkLink (Header' mods sym a :> sub) a0 #
HasLink sub => HasLink (IsSecure :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (IsSecure :> sub) -> Link -> MkLink (IsSecure :> sub) a #
(KnownSymbol sym, HasLink sub) => HasLink (QueryFlag sym :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (QueryFlag sym :> sub) -> Link -> MkLink (QueryFlag sym :> sub) a #
(KnownSymbol sym, ToHttpApiData v, HasLink sub, SBoolI (FoldRequired mods)) => HasLink (QueryParam' mods sym v :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (QueryParam' mods sym v :> sub) -> Link -> MkLink (QueryParam' mods sym v :> sub) a #
(KnownSymbol sym, ToHttpApiData v, HasLink sub) => HasLink (QueryParams sym v :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (QueryParams sym v :> sub) -> Link -> MkLink (QueryParams sym v :> sub) a #
HasLink sub => HasLink (RemoteHost :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (RemoteHost :> sub) -> Link -> MkLink (RemoteHost :> sub) a #
HasLink sub => HasLink (ReqBody' mods ct a :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (ReqBody' mods ct a :> sub) -> Link -> MkLink (ReqBody' mods ct a :> sub) a0 #
HasLink sub => HasLink (StreamBody' mods framing ct a :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (StreamBody' mods framing ct a :> sub) -> Link -> MkLink (StreamBody' mods framing ct a :> sub) a0 #
HasLink sub => HasLink (WithResource res :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (WithResource res :> sub) -> Link -> MkLink (WithResource res :> sub) a #
HasLink sub => HasLink (Vault :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (Vault :> sub) -> Link -> MkLink (Vault :> sub) a #
(TypeError (NoInstanceForSub (HasLink :: Type -> Constraint) ty) :: Constraint) => HasLink (ty :> sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (ty :> sub) -> Link -> MkLink (ty :> sub) a #
HasLink (UVerb m ct a :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (UVerb m ct a) -> Link -> MkLink (UVerb m ct a) a0 #
HasLink sub => HasLink (WithNamedContext name context sub :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a) -> Proxy (WithNamedContext name context sub) -> Link -> MkLink (WithNamedContext name context sub) a #
HasLink (Verb m s ct a :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (Verb m s ct a) -> Link -> MkLink (Verb m s ct a) a0 #
HasLink (Stream m status fr ct a :: Type) # |
Instance details Defined in Servant.Links Methods toLink :: (Link -> a0) -> Proxy (Stream m status fr ct a) -> Link -> MkLink (Stream m status fr ct a) a0 #

type family IsElem endpoint api where ... #

Closed type family, check if `endpoint` is within `api`. Uses ``IsElem'`` if it exhausts all other options.

    >>> ok (Proxy :: Proxy (IsElem ("hello" :> Get '[JSON] Int) SampleAPI))
    OK

    >>> ok (Proxy :: Proxy (IsElem ("bye" :> Get '[JSON] Int) SampleAPI))
    ...
    ... Could not ...
    ...

An endpoint is considered within an api even if it is missing combinators that don't affect the URL:

    >>> ok (Proxy :: Proxy (IsElem (Get '[JSON] Int) (Header "h" Bool :> Get '[JSON] Int)))
    OK

    >>> ok (Proxy :: Proxy (IsElem (Get '[JSON] Int) (ReqBody '[JSON] Bool :> Get '[JSON] Int)))
    OK

- N.B.:* `IsElem a b` can be seen as capturing the notion of whether the URL represented by `a` would match the URL represented by `b`, *not* whether a request represented by `a` matches the endpoints serving `b` (for the latter, use `IsIn`).

Equations

IsElem e (sa :<|> sb) = Or (IsElem e sa) (IsElem e sb) |
IsElem (e :> sa) (e :> sb) = IsElem sa sb |
IsElem sa (Header sym x :> sb) = IsElem sa sb |
IsElem sa (Header' mods sym x :> sb) = IsElem sa sb |
IsElem sa (ReqBody y x :> sb) = IsElem sa sb |
IsElem (CaptureAll z y :> sa) (CaptureAll x y :> sb) = IsElem sa sb |
IsElem (Capture z y :> sa) (Capture x y :> sb) = IsElem sa sb |
IsElem sa (QueryParam x y :> sb) = IsElem sa sb |
IsElem sa (QueryParams x y :> sb) = IsElem sa sb |
IsElem sa (QueryFlag x :> sb) = IsElem sa sb |
IsElem sa (Fragment x :> sb) = IsElem sa sb |
IsElem (Verb m s ct typ) (Verb m s ct' typ) = IsSubList ct ct' |
IsElem e e = () |
IsElem e (NamedRoutes rs) = IsElem e (ToServantApi rs) |
IsElem e a = IsElem' e a |

type family IsElem' a s #

You may use this type family to tell the type checker that your custom type may be skipped as part of a link. This is useful for things like ``QueryParam`` that are optional in a URI and do not affect them if they are omitted.

    >>> data CustomThing
    >>> type instance IsElem' e (CustomThing :> s) = IsElem e s

Note that ``IsElem`` is called, which will mutually recurse back to ``IsElem'`` if it exhausts all other options again.

Once you have written a `HasLink` instance for `CustomThing` you are ready to go.

data Link #

A safe link datatype. The only way of constructing a `Link` is using `safeLink`, which means any `Link` is guaranteed to be part of the mentioned API.

#### Instances

Instances details

Show Link # |
Instance details Defined in Servant.Links Methods showsPrec :: Int -> Link -> ShowS # show :: Link -> String # showList :: [Link] -> ShowS #
ToHttpApiData Link # |
Instance details Defined in Servant.Links Methods toUrlPiece :: Link -> Text # toEncodedUrlPiece :: Link -> Builder # toHeader :: Link -> ByteString # toQueryParam :: Link -> Text # toEncodedQueryParam :: Link -> Builder #

safeLink #

Arguments

:: (IsElem endpoint api, HasLink endpoint) |
=> Proxy api | The whole API that this endpoint is a part of
-> Proxy endpoint | The API endpoint you would like to point to
-> MkLink endpoint Link |

Create a valid (by construction) relative URI with query params.

This function will only typecheck if `endpoint` is part of the API `api`

type family MkLink (endpoint :: k) a #

#### Instances

Instances details

type MkLink EmptyAPI a # |
Instance details Defined in Servant.Links type MkLink EmptyAPI a = EmptyAPI
type MkLink Raw a # |
Instance details Defined in Servant.Links type MkLink Raw a = a
type MkLink RawM a # |
Instance details Defined in Servant.Links type MkLink RawM a = a
type MkLink (NamedRoutes routes :: Type) a # |
Instance details Defined in Servant.Links type MkLink (NamedRoutes routes :: Type) a = routes (AsLink a)
type MkLink (a :<|> b :: Type) r # |
Instance details Defined in Servant.Links type MkLink (a :<|> b :: Type) r = MkLink a r :<|> MkLink b r
type MkLink (NoContentVerb m :: Type) r # |
Instance details Defined in Servant.Links type MkLink (NoContentVerb m :: Type) r = r
type MkLink (arr :> sub :: Type) _1 # |
Instance details Defined in Servant.Links type MkLink (arr :> sub :: Type) _1 = TypeError (PartialApplication (HasLink :: Type -> Constraint) arr) :: Type
type MkLink (sym :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (sym :> sub :: Type) a = MkLink sub a
type MkLink (HttpVersion :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (HttpVersion :> sub :: Type) a = MkLink sub a
type MkLink (BasicAuth realm a :> sub :: Type) r # |
Instance details Defined in Servant.Links type MkLink (BasicAuth realm a :> sub :: Type) r = MkLink sub r
type MkLink (Capture' mods sym v :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (Capture' mods sym v :> sub :: Type) a = v -> MkLink sub a
type MkLink (CaptureAll sym v :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (CaptureAll sym v :> sub :: Type) a = [v] -> MkLink sub a
type MkLink (Description s :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (Description s :> sub :: Type) a = MkLink sub a
type MkLink (Summary s :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (Summary s :> sub :: Type) a = MkLink sub a
type MkLink (AuthProtect tag :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (AuthProtect tag :> sub :: Type) a = MkLink sub a
type MkLink (Fragment v :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (Fragment v :> sub :: Type) a = v -> MkLink sub a
type MkLink (Header' mods sym a :> sub :: Type) r # |
Instance details Defined in Servant.Links type MkLink (Header' mods sym a :> sub :: Type) r = MkLink sub r
type MkLink (IsSecure :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (IsSecure :> sub :: Type) a = MkLink sub a
type MkLink (QueryFlag sym :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (QueryFlag sym :> sub :: Type) a = Bool -> MkLink sub a
type MkLink (QueryParam' mods sym v :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (QueryParam' mods sym v :> sub :: Type) a = If (FoldRequired mods) v (Maybe v) -> MkLink sub a
type MkLink (QueryParams sym v :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (QueryParams sym v :> sub :: Type) a = [v] -> MkLink sub a
type MkLink (RemoteHost :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (RemoteHost :> sub :: Type) a = MkLink sub a
type MkLink (ReqBody' mods ct a :> sub :: Type) r # |
Instance details Defined in Servant.Links type MkLink (ReqBody' mods ct a :> sub :: Type) r = MkLink sub r
type MkLink (StreamBody' mods framing ct a :> sub :: Type) r # |
Instance details Defined in Servant.Links type MkLink (StreamBody' mods framing ct a :> sub :: Type) r = MkLink sub r
type MkLink (WithResource res :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (WithResource res :> sub :: Type) a = MkLink sub a
type MkLink (Vault :> sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (Vault :> sub :: Type) a = MkLink sub a
type MkLink (UVerb m ct a :: Type) r # |
Instance details Defined in Servant.Links type MkLink (UVerb m ct a :: Type) r = r
type MkLink (WithNamedContext name context sub :: Type) a # |
Instance details Defined in Servant.Links type MkLink (WithNamedContext name context sub :: Type) a = MkLink sub a
type MkLink (Verb m s ct a :: Type) r # |
Instance details Defined in Servant.Links type MkLink (Verb m s ct a :: Type) r = r
type MkLink (Stream m status fr ct a :: Type) r # |
Instance details Defined in Servant.Links type MkLink (Stream m status fr ct a :: Type) r = r

Type-safe internal URIs

# Re-exports

type family If (cond :: Bool) (tru :: k) (fls :: k) :: k where ... #

Type-level If. `If True a b` ==> `a`; `If False a b` ==> `b`

Equations

If 'True (tru :: k) (fls :: k) = tru |
If 'False (tru :: k) (fls :: k) = fls |

data SBool (b :: Bool) where #

Constructors

STrue :: SBool 'True |
SFalse :: SBool 'False |

#### Instances

Instances details

EqP SBool | Since: singleton-bool-0.1.7
Instance details Defined in Data.Singletons.Bool Methods eqp :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> Bool #
GNFData SBool | Since: singleton-bool-0.1.6
Instance details Defined in Data.Singletons.Bool Methods grnf :: forall (a :: Bool). SBool a -> () #
GCompare SBool | Since: singleton-bool-0.1.6
Instance details Defined in Data.Singletons.Bool Methods gcompare :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> GOrdering a b #

GEq SBool

    >>> geq STrue STrue
    Just Refl

    >>> geq STrue SFalse
    Nothing

Since: singleton-bool-0.1.6

Instance details Defined in Data.Singletons.Bool Methods geq :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> Maybe (a :~: b) #

GRead SBool

    >>> readsPrec 0 "Some STrue" :: [(Some SBool, String)]
    [(Some STrue,"")]

    >>> readsPrec 0 "Some SFalse" :: [(Some SBool, String)]
    [(Some SFalse,"")]

    >>> readsPrec 0 "Some Else" :: [(Some SBool, String)]
    []

Since: singleton-bool-0.1.6

Instance details Defined in Data.Singletons.Bool Methods greadsPrec :: Int -> GReadS SBool #

GShow SBool

    >>> showsPrec 0 STrue ""
    "STrue"

Since: singleton-bool-0.1.6

Instance details Defined in Data.Singletons.Bool Methods gshowsPrec :: forall (a :: Bool). Int -> SBool a -> ShowS #
OrdP SBool | Since: singleton-bool-0.1.7
Instance details Defined in Data.Singletons.Bool Methods comparep :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> Ordering #
SBoolI b => Boring (SBool b) | Since: singleton-bool-0.1.6
Instance details Defined in Data.Singletons.Bool Methods boring :: SBool b #
NFData (SBool b) | Since: singleton-bool-0.1.6
Instance details Defined in Data.Singletons.Bool Methods rnf :: SBool b -> () #
Show (SBool b) | Since: singleton-bool-0.1.5
Instance details Defined in Data.Singletons.Bool Methods showsPrec :: Int -> SBool b -> ShowS # show :: SBool b -> String # showList :: [SBool b] -> ShowS #
Eq (SBool b) | Since: singleton-bool-0.1.5
Instance details Defined in Data.Singletons.Bool Methods (==) :: SBool b -> SBool b -> Bool # (/=) :: SBool b -> SBool b -> Bool #
Ord (SBool b) | Since: singleton-bool-0.1.5
Instance details Defined in Data.Singletons.Bool Methods compare :: SBool b -> SBool b -> Ordering # (<) :: SBool b -> SBool b -> Bool # (<=) :: SBool b -> SBool b -> Bool # (>) :: SBool b -> SBool b -> Bool # (>=) :: SBool b -> SBool b -> Bool # max :: SBool b -> SBool b -> SBool b # min :: SBool b -> SBool b -> SBool b #

class SBoolI (b :: Bool) where #

Methods

sbool :: SBool b #

#### Instances

Instances details

SBoolI 'False |
Instance details Defined in Data.Singletons.Bool Methods sbool :: SBool 'False #
SBoolI 'True |
Instance details Defined in Data.Singletons.Bool Methods sbool :: SBool 'True #