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

Servant.API

Synopsis

Combinators

Type-level combinator for expressing subrouting: :>

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

Type-level combinator for an empty API: EmptyAPI

data Lenient Source #

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

data Optional Source #

Optional argument. Wrapped in Maybe.

data Required Source #

Required argument. Not wrapped.

data Strict Source #

Strictly parsed argument. Not wrapped.

Type-level modifiers for QueryParam, Header and ReqBody.

Accessing information from the request

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

Retrieving specific headers from the request

Retrieving the HTTP version of the request

Retrieving parameters from the query string of the URI: QueryParam

data QueryString Source #

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 Source #

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

Documenting the fragment of the URI: Fragment

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

Retrieving the IP of the client

Is the request made through HTTPS?

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

Access context entries in combinators in servant-server

Access a managed resource scoped to a single request

Actual endpoints, distinguished by HTTP method

type Delete = Verb 'DELETE 200 Source #

DELETE with 200 status code.

type DeleteAccepted = Verb 'DELETE 202 Source #

DELETE with 202 status code.

type DeleteNoContent = NoContentVerb 'DELETE Source #

DELETE with 204 status code.

type DeleteNonAuthoritative = Verb 'DELETE 203 Source #

DELETE with 203 status code.

type Get = Verb 'GET 200 Source #

GET with 200 status code.

type GetAccepted = Verb 'GET 202 Source #

GET with 202 status code.

type GetNoContent = NoContentVerb 'GET Source #

GET with 204 status code.

type GetNonAuthoritative = Verb 'GET 203 Source #

GET with 203 status code.

type GetPartialContent = Verb 'GET 206 Source #

GET with 206 status code.

type GetResetContent = Verb 'GET 205 Source #

GET with 205 status code.

data NoContentVerb (method :: k1) Source #

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) Source # 
Instance details

Defined in Servant.Links

Methods

toLink :: (Link -> a) -> Proxy (NoContentVerb m) -> Link -> MkLink (NoContentVerb m) a Source #

Generic (NoContentVerb method) Source # 
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-4iCSaizRnLaBfWcjas4BZ6" '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 Source # 
Instance details

Defined in Servant.Links

type MkLink (NoContentVerb m :: Type) r = r
type Rep (NoContentVerb method) Source # 
Instance details

Defined in Servant.API.Verbs

type Rep (NoContentVerb method) = D1 ('MetaData "NoContentVerb" "Servant.API.Verbs" "servant-0.20.2-4iCSaizRnLaBfWcjas4BZ6" 'False) (V1 :: Type -> Type)

type Patch = Verb 'PATCH 200 Source #

PATCH with 200 status code.

type PatchAccepted = Verb 'PATCH 202 Source #

PATCH with 202 status code.

type PatchNoContent = NoContentVerb 'PATCH Source #

PATCH with 204 status code.

type PatchNonAuthoritative = Verb 'PATCH 203 Source #

PATCH with 203 status code.

type Post = Verb 'POST 200 Source #

POST with 200 status code.

type PostAccepted = Verb 'POST 202 Source #

POST with 202 status code.

type PostCreated = Verb 'POST 201 Source #

POST with 201 status code.

type PostNoContent = NoContentVerb 'POST Source #

POST with 204 status code.

type PostNonAuthoritative = Verb 'POST 203 Source #

POST with 203 status code.

type PostResetContent = Verb 'POST 205 Source #

POST with 205 status code.

type Put = Verb 'PUT 200 Source #

PUT with 200 status code.

type PutAccepted = Verb 'PUT 202 Source #

PUT with 202 status code.

type PutCreated = Verb 'PUT 201 Source #

PUT with 201 status code.

type PutNoContent = NoContentVerb 'PUT Source #

PUT with 204 status code.

type PutNonAuthoritative = Verb 'PUT 203 Source #

PUT with 203 status code.

class ReflectMethod (a :: k) where Source #

Methods

reflectMethod :: Proxy a -> Method Source #

Instances

Instances details
ReflectMethod 'CONNECT Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'CONNECT -> Method Source #

ReflectMethod 'DELETE Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'DELETE -> Method Source #

ReflectMethod 'GET Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'GET -> Method Source #

ReflectMethod 'HEAD Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'HEAD -> Method Source #

ReflectMethod 'OPTIONS Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'OPTIONS -> Method Source #

ReflectMethod 'PATCH Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'PATCH -> Method Source #

ReflectMethod 'POST Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'POST -> Method Source #

ReflectMethod 'PUT Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'PUT -> Method Source #

ReflectMethod 'TRACE Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'TRACE -> Method Source #

data StdMethod #

Constructors

GET 
POST 
HEAD 
PUT 
DELETE 
TRACE 
CONNECT 
OPTIONS 
PATCH 

Instances

Instances details
Data StdMethod 
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

Enum StdMethod 
Instance details

Defined in Network.HTTP.Types.Method

Generic StdMethod 
Instance details

Defined in Network.HTTP.Types.Method

Associated Types

type Rep StdMethod 
Instance details

Defined in Network.HTTP.Types.Method

type Rep StdMethod = D1 ('MetaData "StdMethod" "Network.HTTP.Types.Method" "http-types-0.12.4-6mlc1u2igIqAHu2UUtVbKY" '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)))))
Ix StdMethod 
Instance details

Defined in Network.HTTP.Types.Method

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 Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'CONNECT -> Method Source #

ReflectMethod 'DELETE Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'DELETE -> Method Source #

ReflectMethod 'GET Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'GET -> Method Source #

ReflectMethod 'HEAD Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'HEAD -> Method Source #

ReflectMethod 'OPTIONS Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'OPTIONS -> Method Source #

ReflectMethod 'PATCH Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'PATCH -> Method Source #

ReflectMethod 'POST Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'POST -> Method Source #

ReflectMethod 'PUT Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'PUT -> Method Source #

ReflectMethod 'TRACE Source # 
Instance details

Defined in Servant.API.Verbs

Methods

reflectMethod :: Proxy 'TRACE -> Method Source #

type Rep StdMethod 
Instance details

Defined in Network.HTTP.Types.Method

type Rep StdMethod = D1 ('MetaData "StdMethod" "Network.HTTP.Types.Method" "http-types-0.12.4-6mlc1u2igIqAHu2UUtVbKY" '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)))))

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

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) Source # 
Instance details

Defined in Servant.Links

Methods

toLink :: (Link -> a0) -> Proxy (Verb m s ct a) -> Link -> MkLink (Verb m s ct a) a0 Source #

Generic (Verb method statusCode contentTypes a) Source # 
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-4iCSaizRnLaBfWcjas4BZ6" '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) Source # 
Instance details

Defined in Servant.API.TypeLevel

type MkLink (Verb m s ct a :: Type) r Source # 
Instance details

Defined in Servant.Links

type MkLink (Verb m s ct a :: Type) r = r
type Rep (Verb method statusCode contentTypes a) Source # 
Instance details

Defined in Servant.API.Verbs

type Rep (Verb method statusCode contentTypes a) = D1 ('MetaData "Verb" "Servant.API.Verbs" "servant-0.20.2-4iCSaizRnLaBfWcjas4BZ6" 'False) (V1 :: Type -> Type)

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

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) Source # 
Instance details

Defined in Servant.Links

Methods

toLink :: (Link -> a0) -> Proxy (UVerb m ct a) -> Link -> MkLink (UVerb m ct a) a0 Source #

AtMostOneFragment (UVerb m cts as) Source # 
Instance details

Defined in Servant.API.TypeLevel

type MkLink (UVerb m ct a :: Type) r Source # 
Instance details

Defined in Servant.Links

type MkLink (UVerb m ct a :: Type) r = r

class KnownStatus (StatusOf a) => HasStatus a Source #

Associated Types

type StatusOf a :: Nat Source #

Instances

Instances details
HasStatus NoContent Source #

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) Source # 
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) Source #

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) Source #

type family StatusOf a :: Nat Source #

Instances

Instances details
type StatusOf NoContent Source # 
Instance details

Defined in Servant.API.UVerb

type StatusOf NoContent = 204
type StatusOf (Headers ls a) Source # 
Instance details

Defined in Servant.API.UVerb

type StatusOf (Headers ls a) = StatusOf a
type StatusOf (WithStatus n a) Source # 
Instance details

Defined in Servant.API.UVerb

type StatusOf (WithStatus n a) = n

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

Instances

Instances details
type Statuses ('[] :: [Type]) Source # 
Instance details

Defined in Servant.API.UVerb

type Statuses ('[] :: [Type]) = '[] :: [Nat]
type Statuses (a ': as) Source # 
Instance details

Defined in Servant.API.UVerb

type Statuses (a ': as) = StatusOf a ': Statuses as

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

Instances

Instances details
type Statuses ('[] :: [Type]) Source # 
Instance details

Defined in Servant.API.UVerb

type Statuses ('[] :: [Type]) = '[] :: [Nat]
type Statuses (a ': as) Source # 
Instance details

Defined in Servant.API.UVerb

type Statuses (a ': as) = StatusOf a ': Statuses as

type Union = NS I Source #

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

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) 

newtype WithStatus (k :: Nat) a Source #

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) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy FormUrlEncoded -> WithStatus _status a -> ByteString Source #

MimeRender JSON a => MimeRender JSON (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy JSON -> WithStatus _status a -> ByteString Source #

MimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy OctetStream -> WithStatus _status a -> ByteString Source #

MimeRender PlainText a => MimeRender PlainText (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy PlainText -> WithStatus _status a -> ByteString Source #

MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

MimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy JSON -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

MimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy OctetStream -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

MimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

Show a => Show (WithStatus k a) Source # 
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) Source # 
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) Source #

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) Source # 
Instance details

Defined in Servant.API.UVerb

type StatusOf (WithStatus n a) = n

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

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

Sub-APIs defined as records of routes

data AsApi Source #

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

Instances

Instances details
GenericMode AsApi Source # 
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 Source # 
Instance details

Defined in Servant.API.Generic

type AsApi :- api = api

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

Minimal complete definition

gtoServant, gfromServant

Instances

Instances details
(GServantProduct l, GServantProduct r) => GServantProduct (l :*: r :: k -> Type) Source # 
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) Source # 
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) Source # 
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

class GenericMode (mode :: k) Source #

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 Source #

Instances

Instances details
GenericMode AsApi Source # 
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) Source # 
Instance details

Defined in Servant.Links

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

Instances

Instances details
type AsApi :- api Source # 
Instance details

Defined in Servant.API.Generic

type AsApi :- api = api
type (AsLink a :: Type) :- api Source # 
Instance details

Defined in Servant.Links

type (AsLink a :: Type) :- api = MkLink api a

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

A constraint alias, for work with mode and routes.

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

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

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

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

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) Source #

Get a Proxy of an API type.

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

See ToServant, but at value-level.

Streaming endpoints, distinguished by HTTP method

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

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) Source # 
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 Source #

Generic (Stream method status framing contentType a) Source # 
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-4iCSaizRnLaBfWcjas4BZ6" '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 Source # 
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) Source # 
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-4iCSaizRnLaBfWcjas4BZ6" 'False) (V1 :: Type -> Type)

class FramingRender (strategy :: k) where Source #

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 Source #

Instances

Instances details
FramingRender NetstringFraming Source # 
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 Source #

FramingRender NewlineFraming Source # 
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 Source #

FramingRender NoFraming Source # 
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 Source #

class FramingUnrender (strategy :: k) where Source #

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 Source #

Instances

Instances details
FramingUnrender NetstringFraming Source # 
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 Source #

FramingUnrender NewlineFraming Source # 
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 Source #

FramingUnrender NoFraming Source #

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 Source #

class FromSourceIO chunk a | a -> chunk where Source #

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 Source #

Instances

Instances details
MonadIO m => FromSourceIO a (SourceT m a) Source # 
Instance details

Defined in Servant.API.Stream

Methods

fromSourceIO :: SourceIO a -> IO (SourceT m a) Source #

data NetstringFraming Source #

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 Source # 
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 Source #

FramingUnrender NetstringFraming Source # 
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 Source #

data NewlineFraming Source #

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 Source # 
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 Source #

FramingUnrender NewlineFraming Source # 
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 Source #

data NoFraming Source #

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 Source # 
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 Source #

FramingUnrender NoFraming Source #

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 Source #

type SourceIO = SourceT IO Source #

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]) Source #

A stream request body.

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

Instances

Instances details
HasLink sub => HasLink (StreamBody' mods framing ct a :> sub :: Type) Source # 
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 Source #

Generic (StreamBody' mods framing contentType a) Source # 
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-4iCSaizRnLaBfWcjas4BZ6" '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 Source # 
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) Source # 
Instance details

Defined in Servant.API.Stream

type Rep (StreamBody' mods framing contentType a) = D1 ('MetaData "StreamBody'" "Servant.API.Stream" "servant-0.20.2-4iCSaizRnLaBfWcjas4BZ6" 'False) (V1 :: Type -> Type)

class ToSourceIO chunk a | a -> chunk where Source #

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 Source #

Instances

Instances details
ToSourceIO a (NonEmpty a) Source # 
Instance details

Defined in Servant.API.Stream

Methods

toSourceIO :: NonEmpty a -> SourceIO a Source #

ToSourceIO a [a] Source # 
Instance details

Defined in Servant.API.Stream

Methods

toSourceIO :: [a] -> SourceIO a Source #

SourceToSourceIO m => ToSourceIO chunk (SourceT m chunk) Source #

Relax to use auxiliary class, have m

Instance details

Defined in Servant.API.Stream

Methods

toSourceIO :: SourceT m chunk -> SourceIO chunk Source #

Authentication

Endpoints description

data Description (sym :: Symbol) Source #

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) Source # 
Instance details

Defined in Servant.Links

Methods

toLink :: (Link -> a) -> Proxy (Description s :> sub) -> Link -> MkLink (Description s :> sub) a Source #

type MkLink (Description s :> sub :: Type) a Source # 
Instance details

Defined in Servant.Links

type MkLink (Description s :> sub :: Type) a = MkLink sub a

data Summary (sym :: Symbol) Source #

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) Source # 
Instance details

Defined in Servant.Links

Methods

toLink :: (Link -> a) -> Proxy (Summary s :> sub) -> Link -> MkLink (Summary s :> sub) a Source #

type MkLink (Summary s :> sub :: Type) a Source # 
Instance details

Defined in Servant.Links

type MkLink (Summary s :> sub :: Type) a = MkLink sub a

Content Types

class Accept (ctype :: k) where Source #

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 Source #

contentTypes :: Proxy ctype -> NonEmpty MediaType Source #

Instances

Instances details
Accept FormUrlEncoded Source #
application/x-www-form-urlencoded
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy FormUrlEncoded -> MediaType Source #

contentTypes :: Proxy FormUrlEncoded -> NonEmpty MediaType Source #

Accept JSON Source #
application/json
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy JSON -> MediaType Source #

contentTypes :: Proxy JSON -> NonEmpty MediaType Source #

Accept OctetStream Source #
application/octet-stream
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy OctetStream -> MediaType Source #

contentTypes :: Proxy OctetStream -> NonEmpty MediaType Source #

Accept PlainText Source #
text/plain;charset=utf-8
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy PlainText -> MediaType Source #

contentTypes :: Proxy PlainText -> NonEmpty MediaType Source #

data FormUrlEncoded Source #

Instances

Instances details
Accept FormUrlEncoded Source #
application/x-www-form-urlencoded
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy FormUrlEncoded -> MediaType Source #

contentTypes :: Proxy FormUrlEncoded -> NonEmpty MediaType Source #

ToForm a => MimeRender FormUrlEncoded a Source #

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 Source #

FromForm a => MimeUnrender FormUrlEncoded a Source #

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 Source #

mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String a Source #

MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy FormUrlEncoded -> WithStatus _status a -> ByteString Source #

MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

data JSON Source #

Instances

Instances details
Accept JSON Source #
application/json
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy JSON -> MediaType Source #

contentTypes :: Proxy JSON -> NonEmpty MediaType Source #

ToJSON a => MimeRender JSON a Source #

encode

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy JSON -> a -> ByteString Source #

FromJSON a => MimeUnrender JSON a Source #

eitherDecode

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy JSON -> ByteString -> Either String a Source #

mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String a Source #

MimeRender JSON a => MimeRender JSON (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy JSON -> WithStatus _status a -> ByteString Source #

MimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy JSON -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

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

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 Source #

Instances

Instances details
ToForm a => MimeRender FormUrlEncoded a Source #

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 Source #

ToJSON a => MimeRender JSON a Source #

encode

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy JSON -> a -> ByteString Source #

MimeRender OctetStream ByteString Source #

fromStrict

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy OctetStream -> ByteString -> ByteString Source #

MimeRender OctetStream ByteString Source #
id
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy OctetStream -> ByteString -> ByteString Source #

MimeRender PlainText Text Source #
fromStrict . TextS.encodeUtf8
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy PlainText -> Text -> ByteString Source #

MimeRender PlainText Text Source #

encodeUtf8

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy PlainText -> Text -> ByteString Source #

MimeRender PlainText String Source #
BC.pack
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy PlainText -> String -> ByteString Source #

MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy FormUrlEncoded -> WithStatus _status a -> ByteString Source #

MimeRender JSON a => MimeRender JSON (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy JSON -> WithStatus _status a -> ByteString Source #

MimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy OctetStream -> WithStatus _status a -> ByteString Source #

MimeRender PlainText a => MimeRender PlainText (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy PlainText -> WithStatus _status a -> ByteString Source #

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

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 Source #

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

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 Source #

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 Source #

mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String a Source #

FromJSON a => MimeUnrender JSON a Source #

eitherDecode

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy JSON -> ByteString -> Either String a Source #

mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String a Source #

MimeUnrender OctetStream ByteString Source #
Right . toStrict
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString Source #

mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString Source #

MimeUnrender OctetStream ByteString Source #
Right . id
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString Source #

mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString Source #

MimeUnrender PlainText Text Source #
left show . TextS.decodeUtf8' . toStrict
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text Source #

MimeUnrender PlainText Text Source #
left show . TextL.decodeUtf8'
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text Source #

MimeUnrender PlainText String Source #
Right . BC.unpack
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String String Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String String Source #

MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

MimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy JSON -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

MimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy OctetStream -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

MimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

data NoContent Source #

A type for responses without content-body.

Constructors

NoContent 

Instances

Instances details
Generic NoContent Source # 
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-4iCSaizRnLaBfWcjas4BZ6" 'False) (C1 ('MetaCons "NoContent" 'PrefixI 'False) (U1 :: Type -> Type))
Read NoContent Source # 
Instance details

Defined in Servant.API.ContentTypes

Methods

readsPrec :: Int -> ReadS NoContent

readList :: ReadS [NoContent]

readPrec :: ReadPrec NoContent

readListPrec :: ReadPrec [NoContent]

Show NoContent Source # 
Instance details

Defined in Servant.API.ContentTypes

Methods

showsPrec :: Int -> NoContent -> ShowS

show :: NoContent -> String

showList :: [NoContent] -> ShowS

NFData NoContent Source # 
Instance details

Defined in Servant.API.ContentTypes

Methods

rnf :: NoContent -> ()

Eq NoContent Source # 
Instance details

Defined in Servant.API.ContentTypes

Methods

(==) :: NoContent -> NoContent -> Bool

(/=) :: NoContent -> NoContent -> Bool

HasStatus NoContent Source #

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 Source # 
Instance details

Defined in Servant.API.ContentTypes

Methods

allMimeRender :: Proxy (ctyp ': (ctyp' ': ctyps)) -> NoContent -> [(MediaType, ByteString)] Source #

Accept ctyp => AllMimeRender '[ctyp] NoContent Source # 
Instance details

Defined in Servant.API.ContentTypes

Methods

allMimeRender :: Proxy '[ctyp] -> NoContent -> [(MediaType, ByteString)] Source #

type Rep NoContent Source # 
Instance details

Defined in Servant.API.ContentTypes

type Rep NoContent = D1 ('MetaData "NoContent" "Servant.API.ContentTypes" "servant-0.20.2-4iCSaizRnLaBfWcjas4BZ6" 'False) (C1 ('MetaCons "NoContent" 'PrefixI 'False) (U1 :: Type -> Type))
type StatusOf NoContent Source # 
Instance details

Defined in Servant.API.UVerb

type StatusOf NoContent = 204

data OctetStream Source #

Instances

Instances details
Accept OctetStream Source #
application/octet-stream
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy OctetStream -> MediaType Source #

contentTypes :: Proxy OctetStream -> NonEmpty MediaType Source #

MimeRender OctetStream ByteString Source #

fromStrict

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy OctetStream -> ByteString -> ByteString Source #

MimeRender OctetStream ByteString Source #
id
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy OctetStream -> ByteString -> ByteString Source #

MimeUnrender OctetStream ByteString Source #
Right . toStrict
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString Source #

mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString Source #

MimeUnrender OctetStream ByteString Source #
Right . id
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy OctetStream -> ByteString -> Either String ByteString Source #

mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String ByteString Source #

MimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy OctetStream -> WithStatus _status a -> ByteString Source #

MimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy OctetStream -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

data PlainText Source #

Instances

Instances details
Accept PlainText Source #
text/plain;charset=utf-8
Instance details

Defined in Servant.API.ContentTypes

Methods

contentType :: Proxy PlainText -> MediaType Source #

contentTypes :: Proxy PlainText -> NonEmpty MediaType Source #

MimeRender PlainText Text Source #
fromStrict . TextS.encodeUtf8
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy PlainText -> Text -> ByteString Source #

MimeRender PlainText Text Source #

encodeUtf8

Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy PlainText -> Text -> ByteString Source #

MimeRender PlainText String Source #
BC.pack
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeRender :: Proxy PlainText -> String -> ByteString Source #

MimeUnrender PlainText Text Source #
left show . TextS.decodeUtf8' . toStrict
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text Source #

MimeUnrender PlainText Text Source #
left show . TextL.decodeUtf8'
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String Text Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String Text Source #

MimeUnrender PlainText String Source #
Right . BC.unpack
Instance details

Defined in Servant.API.ContentTypes

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String String Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String String Source #

MimeRender PlainText a => MimeRender PlainText (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeRender :: Proxy PlainText -> WithStatus _status a -> ByteString Source #

MimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a) Source # 
Instance details

Defined in Servant.API.UVerb

Methods

mimeUnrender :: Proxy PlainText -> ByteString -> Either String (WithStatus _status a) Source #

mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String (WithStatus _status a) Source #

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

Response Headers

data ResponseHeader (sym :: Symbol) a Source #

Constructors

Header a 
MissingHeader 
UndecodableHeader ByteString 

Instances

Instances details
Functor (ResponseHeader sym) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

fmap :: (a -> b) -> ResponseHeader sym a -> ResponseHeader sym b

(<$) :: a -> ResponseHeader sym b -> ResponseHeader sym a

Show a => Show (ResponseHeader sym a) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

showsPrec :: Int -> ResponseHeader sym a -> ShowS

show :: ResponseHeader sym a -> String

showList :: [ResponseHeader sym a] -> ShowS

NFData a => NFData (ResponseHeader sym a) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

rnf :: ResponseHeader sym a -> ()

Eq a => Eq (ResponseHeader sym a) Source # 
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 Source #

Minimal complete definition

addOptionalHeader

Instances

Instances details
(KnownSymbol h, ToHttpApiData v, new ~ Headers '[Header' mods h v] a) => AddHeader mods h v a new Source # 
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))) Source # 
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]) Source # 
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) Source # 
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 Source #

Methods

buildHeadersTo :: [Header] -> HList hs Source #

Instances

Instances details
BuildHeadersTo ('[] :: [Type]) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

buildHeadersTo :: [Header] -> HList ('[] :: [Type]) Source #

(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header' mods h v ': xs) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

buildHeadersTo :: [Header] -> HList (Header' mods h v ': xs) Source #

class GetHeaders ls where Source #

Methods

getHeaders :: ls -> [Header] Source #

Instances

Instances details
GetHeadersFromHList hs => GetHeaders (HList hs) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

getHeaders :: HList hs -> [Header] Source #

GetHeaders' hs => GetHeaders (Headers hs a) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

getHeaders :: Headers hs a -> [Header] Source #

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

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) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

rnf :: HList xs -> ()

GetHeadersFromHList hs => GetHeaders (HList hs) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

getHeaders :: HList hs -> [Header] Source #

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

Minimal complete definition

hlistLookupHeader

Instances

Instances details
HasResponseHeader h a (Header' mods h a ': rest) Source # 
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) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

hlistLookupHeader :: HList (first ': rest) -> ResponseHeader h a

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

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

Constructors

Headers 

Fields

Instances

Instances details
(KnownSymbol h, ToHttpApiData v) => AddHeader mods h v (Headers (fst ': rest) a) (Headers (Header' mods h v ': (fst ': rest)) a) Source # 
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) Source # 
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) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

rnf :: Headers ls a -> ()

GetHeaders' hs => GetHeaders (Headers hs a) Source # 
Instance details

Defined in Servant.API.ResponseHeaders

Methods

getHeaders :: Headers hs a -> [Header] Source #

HasStatus a => HasStatus (Headers ls a) Source # 
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) Source # 
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 Source #

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 Source #

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 Source #

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 Source #

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 Source #

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

Untyped endpoints

Plugging in a wai Application, serving directories

FromHttpApiData and ToHttpApiData

class FromHttpApiData a where #

Minimal complete definition

parseUrlPiece | parseQueryParam

Methods

parseUrlPiece :: Text -> Either Text a #

parseHeader :: ByteString -> Either Text a #

parseQueryParam :: Text -> Either Text a #

Instances

Instances details
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 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Version #

parseHeader :: ByteString -> Either Text Version #

parseQueryParam :: Text -> Either Text Version #

FromHttpApiData Void 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text Void #

parseHeader :: ByteString -> Either Text Void #

parseQueryParam :: Text -> Either Text Void #

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 SetCookie 
Instance details

Defined in Web.Internal.HttpApiData

Methods

parseUrlPiece :: Text -> Either Text SetCookie #

parseHeader :: ByteString -> Either Text SetCookie #

parseQueryParam :: Text -> Either Text SetCookie #

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 
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 
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 
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 
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 
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 
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 
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 
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 
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 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 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 () 
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 (Identity a) 
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 (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 (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) 
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) #

(FromHttpApiData a, FromHttpApiData b) => FromHttpApiData (Either a b) 
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) #

HasResolution a => FromHttpApiData (Fixed a) 
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 (Const a b) 
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) 
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 #

Minimal complete definition

toUrlPiece | toQueryParam

Methods

toUrlPiece :: a -> Text #

toEncodedUrlPiece :: a -> Builder #

toHeader :: a -> ByteString #

toQueryParam :: a -> Text #

toEncodedQueryParam :: a -> Builder #

Instances

Instances details
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 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: Version -> Text #

toEncodedUrlPiece :: Version -> Builder #

toHeader :: Version -> ByteString #

toQueryParam :: Version -> Text #

toEncodedQueryParam :: Version -> 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 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 SetCookie 
Instance details

Defined in Web.Internal.HttpApiData

Methods

toUrlPiece :: SetCookie -> Text #

toEncodedUrlPiece :: SetCookie -> Builder #

toHeader :: SetCookie -> ByteString #

toQueryParam :: SetCookie -> Text #

toEncodedQueryParam :: SetCookie -> 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 Source # 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 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 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 () 
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 (Identity a) 
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 (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 (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) 
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 #

(ToHttpApiData a, ToHttpApiData b) => ToHttpApiData (Either a b) 
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 #

HasResolution a => ToHttpApiData (Fixed a) 
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 (Const a b) 
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) 
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

General Authentication

Links

class HasLink (endpoint :: k) where Source #

Construct a toLink for an endpoint.

Associated Types

type MkLink (endpoint :: k) a Source #

Methods

toLink Source #

Arguments

:: (Link -> a) 
-> Proxy endpoint

The API endpoint you would like to point to

-> Link 
-> MkLink endpoint a 

Instances

type family IsElem endpoint api where ... Source #

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 Source #

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 Source #

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

data URI #

Constructors

URI 

Fields

Instances

Instances details
FromJSON URI 
Instance details

Defined in Data.Aeson.Types.FromJSON

Methods

parseJSON :: Value -> Parser URI

parseJSONList :: Value -> Parser [URI]

omittedField :: Maybe URI

FromJSONKey URI 
Instance details

Defined in Data.Aeson.Types.FromJSON

Methods

fromJSONKey :: FromJSONKeyFunction URI

fromJSONKeyList :: FromJSONKeyFunction [URI]

ToJSON URI 
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 
Instance details

Defined in Data.Aeson.Types.ToJSON

Methods

toJSONKey :: ToJSONKeyFunction URI

toJSONKeyList :: ToJSONKeyFunction [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-3E5jmm94IXNFN61MB0hlgL" '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

NFData URI 
Instance details

Defined in Network.URI

Methods

rnf :: URI -> ()

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-3E5jmm94IXNFN61MB0hlgL" '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)))))

safeLink Source #

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 Source #

Instances

Type-safe internal URIs

Re-exports

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

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 
Instance details

Defined in Data.Singletons.Bool

Methods

eqp :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> Bool

GNFData SBool 
Instance details

Defined in Data.Singletons.Bool

Methods

grnf :: forall (a :: Bool). SBool a -> ()

GCompare SBool 
Instance details

Defined in Data.Singletons.Bool

Methods

gcompare :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> GOrdering a b

GEq SBool 
Instance details

Defined in Data.Singletons.Bool

Methods

geq :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> Maybe (a :~: b)

GRead SBool 
Instance details

Defined in Data.Singletons.Bool

Methods

greadsPrec :: Int -> GReadS SBool

GShow SBool 
Instance details

Defined in Data.Singletons.Bool

Methods

gshowsPrec :: forall (a :: Bool). Int -> SBool a -> ShowS

OrdP SBool 
Instance details

Defined in Data.Singletons.Bool

Methods

comparep :: forall (a :: Bool) (b :: Bool). SBool a -> SBool b -> Ordering

Show (SBool b) 
Instance details

Defined in Data.Singletons.Bool

Methods

showsPrec :: Int -> SBool b -> ShowS

show :: SBool b -> String

showList :: [SBool b] -> ShowS

SBoolI b => Boring (SBool b) 
Instance details

Defined in Data.Singletons.Bool

Methods

boring :: SBool b

NFData (SBool b) 
Instance details

Defined in Data.Singletons.Bool

Methods

rnf :: SBool b -> ()

Eq (SBool b) 
Instance details

Defined in Data.Singletons.Bool

Methods

(==) :: SBool b -> SBool b -> Bool

(/=) :: SBool b -> SBool b -> Bool

Ord (SBool b) 
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 #