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

Safe Haskell | None
Language | Haskell2010

Servant.API

Contents

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

Synopsis

- data (path :: k) :> (a :: *)
- data a :<|> b = a :<|> b
- data EmptyAPI = EmptyAPI
- data Strict
- data Lenient
- data Optional
- data Required
- data CaptureAll (sym :: Symbol) (a :: *)
- data Capture' (mods :: [*]) (sym :: Symbol) (a :: *)
- type Capture = Capture' '[]
- data Header' (mods :: [*]) (sym :: Symbol) a
- type Header = Header' '[Optional, Strict]
- data HttpVersion = HttpVersion {
  - httpMajor :: !Int
  - httpMinor :: !Int
  }
- data QueryFlag (sym :: Symbol)
- data QueryParams (sym :: Symbol) (a :: *)
- data QueryParam' (mods :: [*]) (sym :: Symbol) (a :: *)
- type QueryParam = QueryParam' '[Optional, Strict]
- data ReqBody' (mods :: [*]) (contentTypes :: [*]) (a :: *)
- type ReqBody = ReqBody' '[Required, Strict]
- data RemoteHost
- data IsSecure
  - = Secure
  - | NotSecure
- type Vault = Vault RealWorld
- data WithNamedContext (name :: Symbol) (subContext :: [*]) subApi
- data StdMethod
  - = GET
  - | POST
  - | HEAD
  - | PUT
  - | DELETE
  - | TRACE
  - | CONNECT
  - | OPTIONS
  - | PATCH
- class ReflectMethod a where
  - reflectMethod :: Proxy a -> Method
- type GetPartialContent = Verb GET 206
- type PostResetContent = Verb POST 205
- type GetResetContent = Verb GET 205
- type PutNoContent = Verb PUT 204
- type PatchNoContent = Verb PATCH 204
- type DeleteNoContent = Verb DELETE 204
- type PostNoContent = Verb POST 204
- type GetNoContent = Verb GET 204
- type PutNonAuthoritative = Verb PUT 203
- type PatchNonAuthoritative = Verb PATCH 203
- type DeleteNonAuthoritative = Verb DELETE 203
- type PostNonAuthoritative = Verb POST 203
- type GetNonAuthoritative = Verb GET 203
- type PutAccepted = Verb PUT 202
- type PatchAccepted = Verb PATCH 202
- type DeleteAccepted = Verb DELETE 202
- type PostAccepted = Verb POST 202
- type GetAccepted = Verb GET 202
- type PutCreated = Verb PUT 201
- type PostCreated = Verb POST 201
- type Patch = Verb PATCH 200
- type Delete = Verb DELETE 200
- type Put = Verb PUT 200
- type Post = Verb POST 200
- type Get = Verb GET 200
- data Verb (method :: k1) (statusCode :: Nat) (contentTypes :: [*]) (a :: *)
- data NetstringFraming
- data NewlineFraming
- data NoFraming
- class FramingUnrender strategy where
  - framingUnrender :: Monad m => Proxy strategy -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a
- class FramingRender strategy where
  - framingRender :: Monad m => Proxy strategy -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString
- class FromSourceIO chunk a | a -> chunk where
  - fromSourceIO :: SourceIO chunk -> a
- class ToSourceIO chunk a | a -> chunk where
  - toSourceIO :: a -> SourceIO chunk
- type SourceIO = SourceT IO
- data StreamBody' (mods :: [*]) (framing :: *) (contentType :: *) (a :: *)
- type StreamBody = StreamBody' '[]
- type StreamPost = Stream POST 200
- type StreamGet = Stream GET 200
- data Stream (method :: k1) (status :: Nat) (framing :: *) (contentType :: *) (a :: *)
- data BasicAuthData = BasicAuthData {
  - basicAuthUsername :: !ByteString
  - basicAuthPassword :: !ByteString
  }
- data BasicAuth (realm :: Symbol) (userData :: *)
- data Description (sym :: Symbol)
- data Summary (sym :: Symbol)
- data NoContent = NoContent
- class Accept ctype => MimeUnrender ctype a where
  - mimeUnrender :: Proxy ctype -> ByteString -> Either String a
  - mimeUnrenderWithType :: Proxy ctype -> MediaType -> ByteString -> Either String a
- class Accept ctype => MimeRender ctype a where
  - mimeRender :: Proxy ctype -> a -> ByteString
- class Accept ctype where
  - contentType :: Proxy ctype -> MediaType
  - contentTypes :: Proxy ctype -> NonEmpty MediaType
- data OctetStream
- data FormUrlEncoded
- data PlainText
- data JSON
- class HasResponseHeader h a headers
- class AddHeader h v orig new | h v orig -> new, new -> h, new -> v, new -> orig
- class GetHeaders ls where
  - getHeaders :: ls -> [Header]
- class BuildHeadersTo hs where
  - buildHeadersTo :: [Header] -> HList hs
- data HList a where
  - HNil :: HList '[]
  - HCons :: ResponseHeader h x -> HList xs -> HList (Header h x ': xs)
- data ResponseHeader (sym :: Symbol) a
  - = Header a
  - | MissingHeader
  - | UndecodableHeader ByteString
- data Headers ls a = Headers {
  - getResponse :: a
  - getHeadersHList :: HList ls
  }
- addHeader :: AddHeader h v orig new => v -> orig -> new
- noHeader :: AddHeader h v orig new => orig -> new
- lookupResponseHeader :: HasResponseHeader h a headers => Headers headers r -> ResponseHeader h a
- data Raw
- class ToHttpApiData a where
  - toUrlPiece :: a -> Text
  - toEncodedUrlPiece :: a -> Builder
  - toHeader :: a -> ByteString
  - toQueryParam :: a -> Text
- class FromHttpApiData a where
  - parseUrlPiece :: Text -> Either Text a
  - parseHeader :: ByteString -> Either Text a
  - parseQueryParam :: Text -> Either Text a
- data AuthProtect (tag :: k)
- data URI = URI {
  - uriScheme :: String
  - uriAuthority :: Maybe URIAuth
  - uriPath :: String
  - uriQuery :: String
  - uriFragment :: String
  }
- type family IsElem endpoint api :: Constraint where ...
- type family IsElem' a s :: Constraint
- class HasLink endpoint where
  - type MkLink endpoint (a :: *)
  - toLink :: (Link -> a) -> Proxy endpoint -> Link -> MkLink endpoint a
- data Link
- safeLink :: forall endpoint api. (IsElem endpoint api, HasLink endpoint) => Proxy api -> Proxy endpoint -> MkLink endpoint Link
- type family If (cond :: Bool) (tru :: k) (fls :: k) :: k where ...
- data SBool (b :: Bool) where
  - STrue :: forall (b :: Bool). SBool True
  - SFalse :: forall (b :: Bool). SBool False
- class SBoolI (b :: Bool) where
  - sbool :: SBool b

# Combinators

data (path :: k) :> (a :: *) infixr 4 Source #

The contained API (second argument) can be found under `("/" ++ path)` (path being the first argument).

Example:

    >>> -- GET /hello/world
    >>> -- returning a JSON encoded World value
    >>> type MyApi = "hello" :> "world" :> Get '[JSON] World

Instances

HasLink sub => HasLink (HttpVersion :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (HttpVersion :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (HttpVersion :> sub) -> Link -> MkLink (HttpVersion :> sub) a Source #
HasLink sub => HasLink (Vault :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Vault :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Vault :> sub) -> Link -> MkLink (Vault :> sub) a Source #
HasLink sub => HasLink (BasicAuth realm a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (BasicAuth realm a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (BasicAuth realm a :> sub) -> Link -> MkLink (BasicAuth realm a :> sub) a0 Source #
(ToHttpApiData v, HasLink sub) => HasLink (CaptureAll sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (CaptureAll sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (CaptureAll sym v :> sub) -> Link -> MkLink (CaptureAll sym v :> sub) a Source #
(ToHttpApiData v, HasLink sub) => HasLink (Capture' mods sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Capture' mods sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Capture' mods sym v :> sub) -> Link -> MkLink (Capture' mods sym v :> sub) a Source #
HasLink sub => HasLink (Description s :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Description s :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Description s :> sub) -> Link -> MkLink (Description s :> sub) a Source #
HasLink sub => HasLink (Summary s :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Summary s :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Summary s :> sub) -> Link -> MkLink (Summary s :> sub) a Source #
HasLink sub => HasLink (AuthProtect tag :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (AuthProtect tag :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (AuthProtect tag :> sub) -> Link -> MkLink (AuthProtect tag :> sub) a Source #
HasLink sub => HasLink (IsSecure :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (IsSecure :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (IsSecure :> sub) -> Link -> MkLink (IsSecure :> sub) a Source #
HasLink sub => HasLink (Header' mods sym a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Header' mods sym a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (Header' mods sym a :> sub) -> Link -> MkLink (Header' mods sym a :> sub) a0 Source #
(KnownSymbol sym, HasLink sub) => HasLink (QueryFlag sym :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryFlag sym :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryFlag sym :> sub) -> Link -> MkLink (QueryFlag sym :> sub) a Source #
(KnownSymbol sym, ToHttpApiData v, HasLink sub) => HasLink (QueryParams sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryParams sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryParams sym v :> sub) -> Link -> MkLink (QueryParams sym v :> sub) a Source #
(KnownSymbol sym, ToHttpApiData v, HasLink sub, SBoolI (FoldRequired mods)) => HasLink (QueryParam' mods sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryParam' mods sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryParam' mods sym v :> sub) -> Link -> MkLink (QueryParam' mods sym v :> sub) a Source #
HasLink sub => HasLink (RemoteHost :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (RemoteHost :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (RemoteHost :> sub) -> Link -> MkLink (RemoteHost :> sub) a Source #
HasLink sub => HasLink (ReqBody' mods ct a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (ReqBody' mods ct a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (ReqBody' mods ct a :> sub) -> Link -> MkLink (ReqBody' mods ct a :> sub) a0 Source #
HasLink sub => HasLink (StreamBody' mods framing ct a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (StreamBody' mods framing ct a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (StreamBody' mods framing ct a :> sub) -> Link -> MkLink (StreamBody' mods framing ct a :> sub) a0 Source #
(KnownSymbol sym, HasLink sub) => HasLink (sym :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (sym :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (sym :> sub) -> Link -> MkLink (sym :> sub) a Source #
type MkLink (HttpVersion :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (HttpVersion :> sub :: Type) a = MkLink sub a
type MkLink (Vault :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (Vault :> sub :: Type) a = MkLink sub a
type MkLink (BasicAuth realm a :> sub :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (BasicAuth realm a :> sub :: Type) r = MkLink sub r
type MkLink (CaptureAll sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (CaptureAll sym v :> sub :: Type) a = [v] -> MkLink sub a
type MkLink (Capture' mods sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (Capture' mods sym v :> sub :: Type) a = v -> MkLink sub a
type MkLink (Description s :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (Description s :> sub :: Type) a = MkLink sub a
type MkLink (Summary s :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (Summary s :> sub :: Type) a = MkLink sub a
type MkLink (AuthProtect tag :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (AuthProtect tag :> sub :: Type) a = MkLink sub a
type MkLink (IsSecure :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (IsSecure :> sub :: Type) a = MkLink sub a
type MkLink (Header' mods sym a :> sub :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (Header' mods sym a :> sub :: Type) r = MkLink sub r
type MkLink (QueryFlag sym :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (QueryFlag sym :> sub :: Type) a = Bool -> MkLink sub a
type MkLink (QueryParams sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (QueryParams sym v :> sub :: Type) a = [v] -> MkLink sub a
type MkLink (QueryParam' mods sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (QueryParam' mods sym v :> sub :: Type) a = If (FoldRequired mods) v (Maybe v) -> MkLink sub a
type MkLink (RemoteHost :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (RemoteHost :> sub :: Type) a = MkLink sub a
type MkLink (ReqBody' mods ct a :> sub :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (ReqBody' mods ct a :> sub :: Type) r = MkLink sub r
type MkLink (StreamBody' mods framing ct a :> sub :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (StreamBody' mods framing ct a :> sub :: Type) r = MkLink sub r
type MkLink (sym :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (sym :> sub :: Type) a = MkLink sub a

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

data a :<|> b infixr 3 Source #

Union of two APIs, first takes precedence in case of overlap.

Example:

    >>> :{
    type MyApi = "books" :> Get '[JSON] [Book] -- GET /books
           :<|> "books" :> ReqBody '[JSON] Book :> Post '[JSON] () -- POST /books
    :}

Constructors

a :<|> b infixr 3 |

Instances

Bitraversable (:<|>) Source # |
Instance details Defined in Servant.API.Alternative Methods bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> (a :<|> b) -> f (c :<|> d) Source #
Bifoldable (:<|>) Source # |
Instance details Defined in Servant.API.Alternative Methods bifold :: Monoid m => (m :<|> m) -> m Source # bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> (a :<|> b) -> m Source # bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> (a :<|> b) -> c Source # bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> (a :<|> b) -> c Source #
Bifunctor (:<|>) Source # |
Instance details Defined in Servant.API.Alternative Methods bimap :: (a -> b) -> (c -> d) -> (a :<|> c) -> b :<|> d Source # first :: (a -> b) -> (a :<|> c) -> b :<|> c Source # second :: (b -> c) -> (a :<|> b) -> a :<|> c Source #
Biapplicative (:<|>) Source # |
Instance details Defined in Servant.API.Alternative Methods bipure :: a -> b -> a :<|> b Source # (<<*>>) :: ((a -> b) :<|> (c -> d)) -> (a :<|> c) -> b :<|> d Source # biliftA2 :: (a -> b -> c) -> (d -> e -> f) -> (a :<|> d) -> (b :<|> e) -> c :<|> f Source # (*>>) :: (a :<|> b) -> (c :<|> d) -> c :<|> d Source # (<<*) :: (a :<|> b) -> (c :<|> d) -> a :<|> b Source #
Functor ((:<|>) a) Source # |
Instance details Defined in Servant.API.Alternative Methods fmap :: (a0 -> b) -> (a :<|> a0) -> a :<|> b Source # (<$) :: a0 -> (a :<|> b) -> a :<|> a0 Source #
Foldable ((:<|>) a) Source # |

Instance details

Defined in Servant.API.Alternative

Methods

fold :: Monoid m => (a :<|> m) -> m Source #

foldMap :: Monoid m => (a0 -> m) -> (a :<|> a0) -> m Source #

foldr :: (a0 -> b -> b) -> b -> (a :<|> a0) -> b Source #

foldr' :: (a0 -> b -> b) -> b -> (a :<|> a0) -> b Source #

foldl :: (b -> a0 -> b) -> b -> (a :<|> a0) -> b Source #

foldl' :: (b -> a0 -> b) -> b -> (a :<|> a0) -> b Source #

foldr1 :: (a0 -> a0 -> a0) -> (a :<|> a0) -> a0 Source #

foldl1 :: (a0 -> a0 -> a0) -> (a :<|> a0) -> a0 Source #

toList :: (a :<|> a0) -> [a0] Source #

null :: (a :<|> a0) -> Bool Source #

length :: (a :<|> a0) -> Int Source #

elem :: Eq a0 => a0 -> (a :<|> a0) -> Bool Source #

maximum :: Ord a0 => (a :<|> a0) -> a0 Source #

minimum :: Ord a0 => (a :<|> a0) -> a0 Source #

sum :: Num a0 => (a :<|> a0) -> a0 Source #

product :: Num a0 => (a :<|> a0) -> a0 Source #

Traversable ((:<|>) a) Source # |
Instance details Defined in Servant.API.Alternative Methods traverse :: Applicative f => (a0 -> f b) -> (a :<|> a0) -> f (a :<|> b) Source # sequenceA :: Applicative f => (a :<|> f a0) -> f (a :<|> a0) Source # mapM :: Monad m => (a0 -> m b) -> (a :<|> a0) -> m (a :<|> b) Source # sequence :: Monad m => (a :<|> m a0) -> m (a :<|> a0) Source #
(HasLink a, HasLink b) => HasLink (a :<|> b :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (a :<|> b) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (a :<|> b) -> Link -> MkLink (a :<|> b) a0 Source #
(Bounded a, Bounded b) => Bounded (a :<|> b) Source # |
Instance details Defined in Servant.API.Alternative Methods minBound :: a :<|> b Source # maxBound :: a :<|> b Source #
(Eq a, Eq b) => Eq (a :<|> b) Source # |
Instance details Defined in Servant.API.Alternative Methods (==) :: (a :<|> b) -> (a :<|> b) -> Bool Source # (/=) :: (a :<|> b) -> (a :<|> b) -> Bool Source #
(Show a, Show b) => Show (a :<|> b) Source # |
Instance details Defined in Servant.API.Alternative Methods showsPrec :: Int -> (a :<|> b) -> ShowS Source # show :: (a :<|> b) -> String Source # showList :: [a :<|> b] -> ShowS Source #
(Semigroup a, Semigroup b) => Semigroup (a :<|> b) Source # |
Instance details Defined in Servant.API.Alternative Methods (<>) :: (a :<|> b) -> (a :<|> b) -> a :<|> b Source # sconcat :: NonEmpty (a :<|> b) -> a :<|> b Source # stimes :: Integral b0 => b0 -> (a :<|> b) -> a :<|> b Source #
(Monoid a, Monoid b) => Monoid (a :<|> b) Source # |
Instance details Defined in Servant.API.Alternative Methods mempty :: a :<|> b Source # mappend :: (a :<|> b) -> (a :<|> b) -> a :<|> b Source # mconcat :: [a :<|> b] -> a :<|> b Source #
type MkLink (a :<|> b :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (a :<|> b :: Type) r = MkLink a r :<|> MkLink b r

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

data EmptyAPI Source #

An empty API: one which serves nothing. Morally speaking, this should be the unit of `:<|>`. Implementors of interpretations of API types should treat `EmptyAPI` as close to the unit as possible.

Constructors

EmptyAPI |

Instances

Bounded EmptyAPI Source # |
Instance details Defined in Servant.API.Empty Methods minBound :: EmptyAPI Source # maxBound :: EmptyAPI Source #
Enum EmptyAPI Source # |

Instance details

Defined in Servant.API.Empty

Methods

succ :: EmptyAPI -> EmptyAPI Source #

pred :: EmptyAPI -> EmptyAPI Source #

toEnum :: Int -> EmptyAPI Source #

fromEnum :: EmptyAPI -> Int Source #

enumFrom :: EmptyAPI -> [EmptyAPI] Source #

enumFromThen :: EmptyAPI -> EmptyAPI -> [EmptyAPI] Source #

enumFromTo :: EmptyAPI -> EmptyAPI -> [EmptyAPI] Source #

enumFromThenTo :: EmptyAPI -> EmptyAPI -> EmptyAPI -> [EmptyAPI] Source #

Eq EmptyAPI Source # |
Instance details Defined in Servant.API.Empty Methods (==) :: EmptyAPI -> EmptyAPI -> Bool Source # (/=) :: EmptyAPI -> EmptyAPI -> Bool Source #
Show EmptyAPI Source # |
Instance details Defined in Servant.API.Empty Methods showsPrec :: Int -> EmptyAPI -> ShowS Source # show :: EmptyAPI -> String Source # showList :: [EmptyAPI] -> ShowS Source #
HasLink EmptyAPI Source # |
Instance details Defined in Servant.Links Associated Types type MkLink EmptyAPI a :: Type Source # Methods toLink :: (Link -> a) -> Proxy EmptyAPI -> Link -> MkLink EmptyAPI a Source #
type MkLink EmptyAPI a Source # |
Instance details Defined in Servant.Links type MkLink EmptyAPI a = EmptyAPI

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

data Strict Source #

Strictly parsed argument. Not wrapped.

Instances

(KnownSymbol h, ToHttpApiData v) => AddHeader h v (Headers (fst ': rest) a) (Headers (Header h v ': (fst ': rest)) a) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header h v ': (fst ': rest)) a
HasResponseHeader h a (Header h a ': rest) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods hlistLookupHeader :: HList (Header h a ': rest) -> ResponseHeader h a
(KnownSymbol h, GetHeadersFromHList rest, ToHttpApiData v) => GetHeaders' (Header h v ': rest) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders' :: Headers (Header h v ': rest) a -> [Header0]
(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header h v ': xs) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods buildHeadersTo :: [Header0] -> HList (Header h v ': xs) Source #

data Lenient Source #

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

data Optional Source #

Optional argument. Wrapped in `Maybe`.

Instances

(KnownSymbol h, ToHttpApiData v) => AddHeader h v (Headers (fst ': rest) a) (Headers (Header h v ': (fst ': rest)) a) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header h v ': (fst ': rest)) a
HasResponseHeader h a (Header h a ': rest) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods hlistLookupHeader :: HList (Header h a ': rest) -> ResponseHeader h a
(KnownSymbol h, GetHeadersFromHList rest, ToHttpApiData v) => GetHeaders' (Header h v ': rest) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders' :: Headers (Header h v ': rest) a -> [Header0]
(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header h v ': xs) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods buildHeadersTo :: [Header0] -> HList (Header h v ': xs) Source #

data Required Source #

Required argument. Not wrapped.

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

# Accessing information from the request

data CaptureAll (sym :: Symbol) (a :: *) Source #

Capture all remaining values from the request path under a certain type `a`.

Example:

    >>> -- GET /src/*
    >>> type MyAPI = "src" :> CaptureAll "segments" Text :> Get '[JSON] SourceFile

Instances

(ToHttpApiData v, HasLink sub) => HasLink (CaptureAll sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (CaptureAll sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (CaptureAll sym v :> sub) -> Link -> MkLink (CaptureAll sym v :> sub) a Source #
type MkLink (CaptureAll sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (CaptureAll sym v :> sub :: Type) a = [v] -> MkLink sub a

data Capture' (mods :: [*]) (sym :: Symbol) (a :: *) Source #

`Capture` which can be modified. For example with `Description`.

Instances

(ToHttpApiData v, HasLink sub) => HasLink (Capture' mods sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Capture' mods sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Capture' mods sym v :> sub) -> Link -> MkLink (Capture' mods sym v :> sub) a Source #
type MkLink (Capture' mods sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (Capture' mods sym v :> sub :: Type) a = v -> MkLink sub a

type Capture = Capture' '[] Source #

Capture a value from the request path under a certain type `a`.

Example:

    >>> -- GET /books/:isbn
    >>> type MyApi = "books" :> Capture "isbn" Text :> Get '[JSON] Book

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

data Header' (mods :: [*]) (sym :: Symbol) a Source #

Instances

(KnownSymbol h, ToHttpApiData v) => AddHeader h v (Headers (fst ': rest) a) (Headers (Header h v ': (fst ': rest)) a) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header h v ': (fst ': rest)) a
HasResponseHeader h a (Header h a ': rest) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods hlistLookupHeader :: HList (Header h a ': rest) -> ResponseHeader h a
HasLink sub => HasLink (Header' mods sym a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Header' mods sym a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (Header' mods sym a :> sub) -> Link -> MkLink (Header' mods sym a :> sub) a0 Source #
(KnownSymbol h, GetHeadersFromHList rest, ToHttpApiData v) => GetHeaders' (Header h v ': rest) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders' :: Headers (Header h v ': rest) a -> [Header0]
(FromHttpApiData v, BuildHeadersTo xs, KnownSymbol h) => BuildHeadersTo (Header h v ': xs) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods buildHeadersTo :: [Header0] -> HList (Header h v ': xs) Source #
type MkLink (Header' mods sym a :> sub :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (Header' mods sym a :> sub :: Type) r = MkLink sub r

type Header = Header' '[Optional, Strict] Source #

Extract the given header's value as a value of type `a`. I.e. header sent by client, parsed by server.

Example:

    >>> newtype Referer = Referer Text deriving (Eq, Show)
    >>>
    >>> -- GET /view-my-referer
    >>> type MyApi = "view-my-referer" :> Header "from" Referer :> Get '[JSON] Referer

Retrieving specific headers from the request

data HttpVersion Source #

HTTP Version.

Note that the Show instance is intended merely for debugging.

Constructors

HttpVersion |

Fields

- httpMajor :: !Int
- httpMinor :: !Int

Instances

Eq HttpVersion |
Instance details Defined in Network.HTTP.Types.Version Methods (==) :: HttpVersion -> HttpVersion -> Bool Source # (/=) :: HttpVersion -> HttpVersion -> Bool Source #
Ord HttpVersion |

Instance details

Defined in Network.HTTP.Types.Version

Methods

compare :: HttpVersion -> HttpVersion -> Ordering Source #

(<) :: HttpVersion -> HttpVersion -> Bool Source #

(<=) :: HttpVersion -> HttpVersion -> Bool Source #

(>) :: HttpVersion -> HttpVersion -> Bool Source #

(>=) :: HttpVersion -> HttpVersion -> Bool Source #

max :: HttpVersion -> HttpVersion -> HttpVersion Source #

min :: HttpVersion -> HttpVersion -> HttpVersion Source #

Show HttpVersion |
Instance details Defined in Network.HTTP.Types.Version Methods showsPrec :: Int -> HttpVersion -> ShowS Source # show :: HttpVersion -> String Source # showList :: [HttpVersion] -> ShowS Source #
HasLink sub => HasLink (HttpVersion :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (HttpVersion :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (HttpVersion :> sub) -> Link -> MkLink (HttpVersion :> sub) a Source #
type MkLink (HttpVersion :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (HttpVersion :> sub :: Type) a = MkLink sub a

Retrieving the HTTP version of the request

data QueryFlag (sym :: Symbol) Source #

Lookup a potentially value-less query string parameter with boolean semantics. If the param `sym` is there without any value, or if it's there with value "true" or "1", it's interpreted as `True`. Otherwise, it's interpreted as `False`.

Example:

    >>> -- /books?published
    >>> type MyApi = "books" :> QueryFlag "published" :> Get '[JSON] [Book]

Instances

(KnownSymbol sym, HasLink sub) => HasLink (QueryFlag sym :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryFlag sym :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryFlag sym :> sub) -> Link -> MkLink (QueryFlag sym :> sub) a Source #
type MkLink (QueryFlag sym :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (QueryFlag sym :> sub :: Type) a = Bool -> MkLink sub a

data QueryParams (sym :: Symbol) (a :: *) Source #

Lookup the values associated to the `sym` query string parameter and try to extract it as a value of type `[a]`. This is typically meant to support query string parameters of the form `param[]=val1&param[]=val2` and so on. Note that servant doesn't actually require the `[]`s and will fetch the values just fine with `param=val1&param=val2`, too.

Example:

    >>> -- /books?authors[]=<author1>&authors[]=<author2>&...
    >>> type MyApi = "books" :> QueryParams "authors" Text :> Get '[JSON] [Book]

Instances

(KnownSymbol sym, ToHttpApiData v, HasLink sub) => HasLink (QueryParams sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryParams sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryParams sym v :> sub) -> Link -> MkLink (QueryParams sym v :> sub) a Source #
type MkLink (QueryParams sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (QueryParams sym v :> sub :: Type) a = [v] -> MkLink sub a

data QueryParam' (mods :: [*]) (sym :: Symbol) (a :: *) Source #

`QueryParam` which can be `Required`, `Lenient`, or modified otherwise.

Instances

(KnownSymbol sym, ToHttpApiData v, HasLink sub, SBoolI (FoldRequired mods)) => HasLink (QueryParam' mods sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryParam' mods sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryParam' mods sym v :> sub) -> Link -> MkLink (QueryParam' mods sym v :> sub) a Source #
type MkLink (QueryParam' mods sym v :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (QueryParam' mods sym v :> sub :: Type) a = If (FoldRequired mods) v (Maybe v) -> MkLink sub a

type QueryParam = QueryParam' '[Optional, Strict] Source #

Lookup the value associated to the `sym` query string parameter and try to extract it as a value of type `a`.

Example:

    >>> -- /books?author=<author name>
    >>> type MyApi = "books" :> QueryParam "author" Text :> Get '[JSON] [Book]

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

data ReqBody' (mods :: [*]) (contentTypes :: [*]) (a :: *) Source #

Note: `ReqBody'` is always `Required`.

Instances

HasLink sub => HasLink (ReqBody' mods ct a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (ReqBody' mods ct a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (ReqBody' mods ct a :> sub) -> Link -> MkLink (ReqBody' mods ct a :> sub) a0 Source #
type MkLink (ReqBody' mods ct a :> sub :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (ReqBody' mods ct a :> sub :: Type) r = MkLink sub r

type ReqBody = ReqBody' '[Required, Strict] Source #

Extract the request body as a value of type `a`.

Example:

    >>> -- POST /books
    >>> type MyApi = "books" :> ReqBody '[JSON] Book :> Post '[JSON] Book

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

data RemoteHost Source #

Provides access to the host or IP address from which the HTTP request was sent.

Instances

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

Retrieving the IP of the client

data IsSecure Source #

Was this request made over an SSL connection?

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

Constructors

Secure | the connection to the server is secure (HTTPS)
NotSecure | the connection to the server is not secure (HTTP)

Instances

Eq IsSecure Source # |
Instance details Defined in Servant.API.IsSecure Methods (==) :: IsSecure -> IsSecure -> Bool Source # (/=) :: IsSecure -> IsSecure -> Bool Source #
Ord IsSecure Source # |
Instance details Defined in Servant.API.IsSecure Methods compare :: IsSecure -> IsSecure -> Ordering Source # (<) :: IsSecure -> IsSecure -> Bool Source # (<=) :: IsSecure -> IsSecure -> Bool Source # (>) :: IsSecure -> IsSecure -> Bool Source # (>=) :: IsSecure -> IsSecure -> Bool Source # max :: IsSecure -> IsSecure -> IsSecure Source # min :: IsSecure -> IsSecure -> IsSecure Source #
Read IsSecure Source # |
Instance details Defined in Servant.API.IsSecure Methods readsPrec :: Int -> ReadS IsSecure Source # readList :: ReadS [IsSecure] Source # readPrec :: ReadPrec IsSecure Source # readListPrec :: ReadPrec [IsSecure] Source #
Show IsSecure Source # |
Instance details Defined in Servant.API.IsSecure Methods showsPrec :: Int -> IsSecure -> ShowS Source # show :: IsSecure -> String Source # showList :: [IsSecure] -> ShowS Source #
Generic IsSecure Source # |
Instance details Defined in Servant.API.IsSecure Associated Types type Rep IsSecure :: Type -> Type Source # Methods from :: IsSecure -> Rep IsSecure x Source # to :: Rep IsSecure x -> IsSecure Source #
HasLink sub => HasLink (IsSecure :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (IsSecure :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (IsSecure :> sub) -> Link -> MkLink (IsSecure :> sub) a Source #
type Rep IsSecure Source # |
Instance details Defined in Servant.API.IsSecure type Rep IsSecure = D1 (MetaData "IsSecure" "Servant.API.IsSecure" "servant-0.15-Fivin89YsQNK2itBc5FoLx" False) (C1 (MetaCons "Secure" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "NotSecure" PrefixI False) (U1 :: Type -> Type))
type MkLink (IsSecure :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (IsSecure :> sub :: Type) a = MkLink sub a

Is the request made through HTTPS?

type Vault = Vault RealWorld Source #

A persistent store for values of arbitrary types.

This variant is the simplest and creates keys in the `IO` monad. See the module Data.Vault.ST if you want to use it with the `ST` monad instead.

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

data WithNamedContext (name :: Symbol) (subContext :: [*]) subApi Source #

`WithNamedContext` names a specific tagged context to use for the combinators in the API. (See also in `servant-server`, `Servant.Server.Context`.) For example:

    type UseNamedContextAPI = WithNamedContext "myContext" '[String] (
        ReqBody '[JSON] Int :> Get '[JSON] Int)

Both the `ReqBody` and `Get` combinators will use the `WithNamedContext` with type tag "myContext" as their context.

`Context`s are only relevant for `servant-server`.

For more information, see the tutorial.

Instances

HasLink sub => HasLink (WithNamedContext name context sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (WithNamedContext name context sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (WithNamedContext name context sub) -> Link -> MkLink (WithNamedContext name context sub) a Source #
type MkLink (WithNamedContext name context sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (WithNamedContext name context sub :: Type) a = MkLink sub a

Access context entries in combinators in servant-server

# Actual endpoints, distinguished by HTTP method

data StdMethod Source #

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

Constructors

GET |
POST |
HEAD |
PUT |
DELETE |
TRACE |
CONNECT |
OPTIONS |
PATCH |

Instances

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

Instance details

Defined in Network.HTTP.Types.Method

Methods

succ :: StdMethod -> StdMethod Source #

pred :: StdMethod -> StdMethod Source #

toEnum :: Int -> StdMethod Source #

fromEnum :: StdMethod -> Int Source #

enumFrom :: StdMethod -> [StdMethod] Source #

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

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

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

Eq StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods (==) :: StdMethod -> StdMethod -> Bool Source # (/=) :: StdMethod -> StdMethod -> Bool Source #
Ord StdMethod |

Instance details

Defined in Network.HTTP.Types.Method

Methods

compare :: StdMethod -> StdMethod -> Ordering Source #

(<) :: StdMethod -> StdMethod -> Bool Source #

(<=) :: StdMethod -> StdMethod -> Bool Source #

(>) :: StdMethod -> StdMethod -> Bool Source #

(>=) :: StdMethod -> StdMethod -> Bool Source #

max :: StdMethod -> StdMethod -> StdMethod Source #

min :: StdMethod -> StdMethod -> StdMethod Source #

Read StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods readsPrec :: Int -> ReadS StdMethod Source # readList :: ReadS [StdMethod] Source # readPrec :: ReadPrec StdMethod Source # readListPrec :: ReadPrec [StdMethod] Source #
Show StdMethod |
Instance details Defined in Network.HTTP.Types.Method Methods showsPrec :: Int -> StdMethod -> ShowS Source # show :: StdMethod -> String Source # showList :: [StdMethod] -> ShowS Source #
Ix StdMethod |

Instance details

Defined in Network.HTTP.Types.Method

Methods

range :: (StdMethod, StdMethod) -> [StdMethod] Source #

index :: (StdMethod, StdMethod) -> StdMethod -> Int Source #

unsafeIndex :: (StdMethod, StdMethod) -> StdMethod -> Int

inRange :: (StdMethod, StdMethod) -> StdMethod -> Bool Source #

rangeSize :: (StdMethod, StdMethod) -> Int Source #

unsafeRangeSize :: (StdMethod, StdMethod) -> Int

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

class ReflectMethod a where Source #

Methods

reflectMethod :: Proxy a -> Method Source #

Instances

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

type GetPartialContent = Verb GET 206 Source #

`GET` with 206 status code.

type PostResetContent = Verb POST 205 Source #

`POST` with 205 status code.

type GetResetContent = Verb GET 205 Source #

`GET` with 205 status code.

type PutNoContent = Verb PUT 204 Source #

`PUT` with 204 status code.

type PatchNoContent = Verb PATCH 204 Source #

`PATCH` with 204 status code.

type DeleteNoContent = Verb DELETE 204 Source #

`DELETE` with 204 status code.

type PostNoContent = Verb POST 204 Source #

`POST` with 204 status code.

type GetNoContent = Verb GET 204 Source #

`GET` with 204 status code.

type PutNonAuthoritative = Verb PUT 203 Source #

`PUT` with 203 status code.

type PatchNonAuthoritative = Verb PATCH 203 Source #

`PATCH` with 203 status code.

type DeleteNonAuthoritative = Verb DELETE 203 Source #

`DELETE` with 203 status code.

type PostNonAuthoritative = Verb POST 203 Source #

`POST` with 203 status code.

type GetNonAuthoritative = Verb GET 203 Source #

`GET` with 203 status code.

type PutAccepted = Verb PUT 202 Source #

`PUT` with 202 status code.

type PatchAccepted = Verb PATCH 202 Source #

`PATCH` with 202 status code.

type DeleteAccepted = Verb DELETE 202 Source #

`DELETE` with 202 status code.

type PostAccepted = Verb POST 202 Source #

`POST` with 202 status code.

type GetAccepted = Verb GET 202 Source #

`GET` with 202 status code.

type PutCreated = Verb PUT 201 Source #

`PUT` with 201 status code.

type PostCreated = Verb POST 201 Source #

`POST` with 201 status code.

type Patch = Verb PATCH 200 Source #

`PATCH` with 200 status code.

type Delete = Verb DELETE 200 Source #

`DELETE` with 200 status code.

type Put = Verb PUT 200 Source #

`PUT` with 200 status code.

type Post = Verb POST 200 Source #

`POST` with 200 status code.

type Get = Verb GET 200 Source #

`GET` with 200 status code.

data Verb (method :: k1) (statusCode :: Nat) (contentTypes :: [*]) (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

HasLink (Verb m s ct a :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Verb m s ct a) a :: Type Source # 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) :: Type -> Type Source # Methods from :: Verb method statusCode contentTypes a -> Rep (Verb method statusCode contentTypes a) x Source # to :: Rep (Verb method statusCode contentTypes a) x -> Verb method statusCode contentTypes a Source #
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.15-Fivin89YsQNK2itBc5FoLx" False) (V1 :: Type -> Type)

# Streaming endpoints, distinguished by HTTP method

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

FramingUnrender NetstringFraming Source # |
Instance details Defined in Servant.API.Stream Methods framingUnrender :: Monad m => Proxy NetstringFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a Source #
FramingRender NetstringFraming Source # |
Instance details Defined in Servant.API.Stream Methods framingRender :: Monad m => Proxy NetstringFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString 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

FramingUnrender NewlineFraming Source # |
Instance details Defined in Servant.API.Stream Methods framingUnrender :: Monad m => Proxy NewlineFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a Source #
FramingRender NewlineFraming Source # |
Instance details Defined in Servant.API.Stream Methods framingRender :: Monad m => Proxy NewlineFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString 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

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 :: Monad m => Proxy NoFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a Source #
FramingRender NoFraming Source # |
Instance details Defined in Servant.API.Stream Methods framingRender :: Monad m => Proxy NoFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString Source #

class FramingUnrender strategy where Source #

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

Methods

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

Instances

FramingUnrender NetstringFraming Source # |
Instance details Defined in Servant.API.Stream Methods framingUnrender :: 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 :: 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 :: Monad m => Proxy NoFraming -> (ByteString -> Either String a) -> SourceT m ByteString -> SourceT m a Source #

class FramingRender strategy 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 :: Monad m => Proxy strategy -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString Source #

Instances

FramingRender NetstringFraming Source # |
Instance details Defined in Servant.API.Stream Methods framingRender :: 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 :: 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 :: Monad m => Proxy NoFraming -> (a -> ByteString) -> SourceT m a -> SourceT m ByteString 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 -> a Source #

Instances

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

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

ToSourceIO a [a] Source # |
Instance details Defined in Servant.API.Stream Methods toSourceIO :: [a] -> SourceIO a Source #
ToSourceIO a (NonEmpty a) Source # |
Instance details Defined in Servant.API.Stream Methods toSourceIO :: NonEmpty 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 #

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`.

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

Instances

HasLink sub => HasLink (StreamBody' mods framing ct a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (StreamBody' mods framing ct a :> sub) a :: Type Source # 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) :: Type -> Type Source # Methods from :: StreamBody' mods framing contentType a -> Rep (StreamBody' mods framing contentType a) x Source # to :: Rep (StreamBody' mods framing contentType a) x -> StreamBody' mods framing contentType a Source #
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.15-Fivin89YsQNK2itBc5FoLx" False) (V1 :: Type -> Type)

type StreamBody = StreamBody' '[] Source #

A stream request body.

type StreamPost = Stream POST 200 Source #

type StreamGet = Stream GET 200 Source #

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

HasLink (Stream m status fr ct a :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Stream m status fr ct a) a :: Type Source # 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) :: Type -> Type Source # Methods from :: Stream method status framing contentType a -> Rep (Stream method status framing contentType a) x Source # to :: Rep (Stream method status framing contentType a) x -> Stream method status framing contentType a Source #
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.15-Fivin89YsQNK2itBc5FoLx" False) (V1 :: Type -> Type)

# Authentication

data BasicAuthData Source #

A simple datatype to hold data required to decorate a request

Constructors

BasicAuthData |

Fields

- basicAuthUsername :: !ByteString
- basicAuthPassword :: !ByteString

data BasicAuth (realm :: Symbol) (userData :: *) Source #

Combinator for Basic Access Authentication.

- IMPORTANT*: Only use Basic Auth over HTTPS! Credentials are not hashed or encrypted. Note also that because the same credentials are sent on every request, Basic Auth is not as secure as some alternatives. Further, the implementation in servant-server does not protect against some types of timing attacks.

In Basic Auth, username and password are base64-encoded and transmitted via the `Authorization` header. Handshakes are not required, making it relatively efficient.

Instances

HasLink sub => HasLink (BasicAuth realm a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (BasicAuth realm a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (BasicAuth realm a :> sub) -> Link -> MkLink (BasicAuth realm a :> sub) a0 Source #
type MkLink (BasicAuth realm a :> sub :: Type) r Source # |
Instance details Defined in Servant.Links type MkLink (BasicAuth realm a :> sub :: Type) r = MkLink sub r

# 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 support is not perfect \
     \but it's still very readable."
    :> Get '[JSON] Book
    :}

Instances

HasLink sub => HasLink (Description s :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Description s :> sub) a :: Type Source # 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

HasLink sub => HasLink (Summary s :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Summary s :> sub) a :: Type Source # 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

data NoContent Source #

A type for responses without content-body.

Constructors

NoContent |

Instances

Eq NoContent Source # |
Instance details Defined in Servant.API.ContentTypes Methods (==) :: NoContent -> NoContent -> Bool Source # (/=) :: NoContent -> NoContent -> Bool Source #
Read NoContent Source # |
Instance details Defined in Servant.API.ContentTypes Methods readsPrec :: Int -> ReadS NoContent Source # readList :: ReadS [NoContent] Source # readPrec :: ReadPrec NoContent Source # readListPrec :: ReadPrec [NoContent] Source #
Show NoContent Source # |
Instance details Defined in Servant.API.ContentTypes Methods showsPrec :: Int -> NoContent -> ShowS Source # show :: NoContent -> String Source # showList :: [NoContent] -> ShowS Source #
Generic NoContent Source # |
Instance details Defined in Servant.API.ContentTypes Associated Types type Rep NoContent :: Type -> Type Source # Methods from :: NoContent -> Rep NoContent x Source # to :: Rep NoContent x -> NoContent Source #
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 ': ([] :: [Type])) 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.15-Fivin89YsQNK2itBc5FoLx" False) (C1 (MetaCons "NoContent" PrefixI False) (U1 :: Type -> Type))

class Accept ctype => MimeUnrender ctype 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

MimeUnrender OctetStream ByteString Source #

    Right . toStrict

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy OctetStream -> ByteString0 -> Either String ByteString Source # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString0 -> 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 #
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 #

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

class Accept ctype => MimeRender ctype 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

MimeRender OctetStream ByteString Source # | `fromStrict`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy OctetStream -> ByteString -> ByteString0 Source #

MimeRender OctetStream ByteString Source #

    id

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy OctetStream -> ByteString -> ByteString 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 #

MimeRender PlainText String Source #

    BC.pack

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> String -> 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 #
ToJSON a => MimeRender JSON a Source # | `encode`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy JSON -> a -> ByteString Source #

class Accept ctype 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

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

Accept JSON Source #

    application/json

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

data OctetStream Source #

Instances

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 #

MimeUnrender OctetStream ByteString Source #

    Right . toStrict

Instance details Defined in Servant.API.ContentTypes Methods mimeUnrender :: Proxy OctetStream -> ByteString0 -> Either String ByteString Source # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString0 -> 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 ByteString Source # | `fromStrict`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy OctetStream -> ByteString -> ByteString0 Source #

MimeRender OctetStream ByteString Source #

    id

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

data FormUrlEncoded Source #

Instances

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

data PlainText Source #

Instances

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 #

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

MimeRender PlainText String Source #

    BC.pack

Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy PlainText -> String -> 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 #

data JSON Source #

Instances

Accept JSON Source #

    application/json

Instance details Defined in Servant.API.ContentTypes Methods contentType :: Proxy JSON -> MediaType Source # contentTypes :: Proxy JSON -> NonEmpty MediaType 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 #
ToJSON a => MimeRender JSON a Source # | `encode`
Instance details Defined in Servant.API.ContentTypes Methods mimeRender :: Proxy JSON -> a -> ByteString Source #

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

# Response Headers

class HasResponseHeader h a headers Source #

Minimal complete definition

hlistLookupHeader

Instances

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
HasResponseHeader h a (Header h a ': rest) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods hlistLookupHeader :: HList (Header h a ': rest) -> ResponseHeader h a

class AddHeader h v orig new | h v orig -> new, new -> h, new -> v, new -> orig Source #

Minimal complete definition

addOptionalHeader

Instances

(KnownSymbol h, ToHttpApiData v, new ~ Headers (Header h v ': ([] :: [Type])) a) => AddHeader h v a new Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> a -> new
(KnownSymbol h, ToHttpApiData v) => AddHeader h v (Headers (fst ': rest) a) (Headers (Header h v ': (fst ': rest)) a) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header h v ': (fst ': rest)) a

class GetHeaders ls where Source #

Methods

getHeaders :: ls -> [Header] Source #

Instances

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 #

class BuildHeadersTo hs where Source #

Methods

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

Note: if there are multiple occurences of a header in the argument, the values are interspersed with commas before deserialization (see RFC2616 Sec 4.2)

Instances

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

data HList a where Source #

Constructors

HNil :: HList '[] |
HCons :: ResponseHeader h x -> HList xs -> HList (Header h x ': xs) |

Instances

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

data ResponseHeader (sym :: Symbol) a Source #

Constructors

Header a |
MissingHeader |
UndecodableHeader ByteString |

Instances

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

data Headers ls a Source #

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

Constructors

Headers |

Fields

- getResponse :: a

  The underlying value of a `Headers`

- getHeadersHList :: HList ls

  HList of headers.

Instances

(KnownSymbol h, ToHttpApiData v) => AddHeader h v (Headers (fst ': rest) a) (Headers (Header h v ': (fst ': rest)) a) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods addOptionalHeader :: ResponseHeader h v -> Headers (fst ': rest) a -> Headers (Header 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 Source # (<$) :: a -> Headers ls b -> Headers ls a Source #
GetHeaders' hs => GetHeaders (Headers hs a) Source # |
Instance details Defined in Servant.API.ResponseHeaders Methods getHeaders :: Headers hs a -> [Header] Source #

addHeader :: AddHeader 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 example1 = addHeader 5 "hi" :: Headers '[Header "someheader" Int] String;
    >>> getHeaders example1
    [("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.

noHeader :: AddHeader 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
    []

lookupResponseHeader :: 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

# Untyped endpoints

data Raw Source #

Endpoint for plugging in your own Wai `Application`s.

The given `Application` will get the request as received by the server, potentially with a modified (stripped) `pathInfo` if the `Application` is being routed with `:>`.

In addition to just letting you plug in your existing WAI `Application`s, this can also be used with serveDirectory to serve static files stored in a particular directory on your filesystem

Instances

HasLink Raw Source # |
Instance details Defined in Servant.Links Associated Types type MkLink Raw a :: Type Source # Methods toLink :: (Link -> a) -> Proxy Raw -> Link -> MkLink Raw a Source #
type MkLink Raw a Source # |
Instance details Defined in Servant.Links type MkLink Raw a = a

Plugging in a wai `Application`, serving directories

# FromHttpApiData and ToHttpApiData

class ToHttpApiData a where Source #

Convert value to HTTP API data.

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

Minimal complete definition

toUrlPiece | toQueryParam

Methods

toUrlPiece :: a -> Text Source #

Convert to URL path piece.

toEncodedUrlPiece :: a -> Builder Source #

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

toHeader :: a -> ByteString Source #

Convert to HTTP header value.

toQueryParam :: a -> Text Source #

Convert to query param value.

Instances

ToHttpApiData Bool |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Bool -> Text Source # toEncodedUrlPiece :: Bool -> Builder Source # toHeader :: Bool -> ByteString Source # toQueryParam :: Bool -> Text Source #
ToHttpApiData Char |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Char -> Text Source # toEncodedUrlPiece :: Char -> Builder Source # toHeader :: Char -> ByteString Source # toQueryParam :: Char -> Text Source #
ToHttpApiData Double |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Double -> Text Source # toEncodedUrlPiece :: Double -> Builder Source # toHeader :: Double -> ByteString Source # toQueryParam :: Double -> Text Source #
ToHttpApiData Float |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Float -> Text Source # toEncodedUrlPiece :: Float -> Builder Source # toHeader :: Float -> ByteString Source # toQueryParam :: Float -> Text Source #
ToHttpApiData Int |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int -> Text Source # toEncodedUrlPiece :: Int -> Builder Source # toHeader :: Int -> ByteString Source # toQueryParam :: Int -> Text Source #
ToHttpApiData Int8 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int8 -> Text Source # toEncodedUrlPiece :: Int8 -> Builder Source # toHeader :: Int8 -> ByteString Source # toQueryParam :: Int8 -> Text Source #
ToHttpApiData Int16 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int16 -> Text Source # toEncodedUrlPiece :: Int16 -> Builder Source # toHeader :: Int16 -> ByteString Source # toQueryParam :: Int16 -> Text Source #
ToHttpApiData Int32 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int32 -> Text Source # toEncodedUrlPiece :: Int32 -> Builder Source # toHeader :: Int32 -> ByteString Source # toQueryParam :: Int32 -> Text Source #
ToHttpApiData Int64 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Int64 -> Text Source # toEncodedUrlPiece :: Int64 -> Builder Source # toHeader :: Int64 -> ByteString Source # toQueryParam :: Int64 -> Text Source #
ToHttpApiData Integer |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Integer -> Text Source # toEncodedUrlPiece :: Integer -> Builder Source # toHeader :: Integer -> ByteString Source # toQueryParam :: Integer -> Text Source #
ToHttpApiData Natural |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Natural -> Text Source # toEncodedUrlPiece :: Natural -> Builder Source # toHeader :: Natural -> ByteString Source # toQueryParam :: Natural -> Text Source #
ToHttpApiData Ordering |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Ordering -> Text Source # toEncodedUrlPiece :: Ordering -> Builder Source # toHeader :: Ordering -> ByteString Source # toQueryParam :: Ordering -> Text Source #
ToHttpApiData Word |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word -> Text Source # toEncodedUrlPiece :: Word -> Builder Source # toHeader :: Word -> ByteString Source # toQueryParam :: Word -> Text Source #
ToHttpApiData Word8 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word8 -> Text Source # toEncodedUrlPiece :: Word8 -> Builder Source # toHeader :: Word8 -> ByteString Source # toQueryParam :: Word8 -> Text Source #
ToHttpApiData Word16 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word16 -> Text Source # toEncodedUrlPiece :: Word16 -> Builder Source # toHeader :: Word16 -> ByteString Source # toQueryParam :: Word16 -> Text Source #
ToHttpApiData Word32 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word32 -> Text Source # toEncodedUrlPiece :: Word32 -> Builder Source # toHeader :: Word32 -> ByteString Source # toQueryParam :: Word32 -> Text Source #
ToHttpApiData Word64 |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Word64 -> Text Source # toEncodedUrlPiece :: Word64 -> Builder Source # toHeader :: Word64 -> ByteString Source # toQueryParam :: Word64 -> Text Source #

ToHttpApiData ()

    >>> toUrlPiece ()
    "_"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: () -> Text Source # toEncodedUrlPiece :: () -> Builder Source # toHeader :: () -> ByteString Source # toQueryParam :: () -> Text Source #
ToHttpApiData String |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: String -> Text Source # toEncodedUrlPiece :: String -> Builder Source # toHeader :: String -> ByteString Source # toQueryParam :: String -> Text Source #

ToHttpApiData Version

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

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

ToHttpApiData UTCTime

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

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

ToHttpApiData ZonedTime

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

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

ToHttpApiData LocalTime

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

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

ToHttpApiData TimeOfDay

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

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

ToHttpApiData Day

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

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

ToHttpApiData SetCookie

Note: this instance works correctly for alphanumeric name and value

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

    >>> toHeader c
    "SESSID=r2t5uvjq435r4q7ib3vtdjq120"

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: SetCookie -> Text Source # toEncodedUrlPiece :: SetCookie -> Builder Source # toHeader :: SetCookie -> ByteString Source # toQueryParam :: SetCookie -> Text Source #
ToHttpApiData Link Source # |
Instance details Defined in Servant.Links Methods toUrlPiece :: Link -> Text Source # toEncodedUrlPiece :: Link -> Builder Source # toHeader :: Link -> ByteString Source # toQueryParam :: Link -> Text Source #

ToHttpApiData a => ToHttpApiData (Maybe a)

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

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Maybe a -> Text Source # toEncodedUrlPiece :: Maybe a -> Builder Source # toHeader :: Maybe a -> ByteString Source # toQueryParam :: Maybe a -> Text Source #
HasResolution a => ToHttpApiData (Fixed a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Fixed a -> Text Source # toEncodedUrlPiece :: Fixed a -> Builder Source # toHeader :: Fixed a -> ByteString Source # toQueryParam :: Fixed a -> Text Source #
ToHttpApiData a => ToHttpApiData (Min a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Min a -> Text Source # toEncodedUrlPiece :: Min a -> Builder Source # toHeader :: Min a -> ByteString Source # toQueryParam :: Min a -> Text Source #
ToHttpApiData a => ToHttpApiData (Max a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Max a -> Text Source # toEncodedUrlPiece :: Max a -> Builder Source # toHeader :: Max a -> ByteString Source # toQueryParam :: Max a -> Text Source #
ToHttpApiData a => ToHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: First a -> Text Source # toEncodedUrlPiece :: First a -> Builder Source # toHeader :: First a -> ByteString Source # toQueryParam :: First a -> Text Source #
ToHttpApiData a => ToHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Last a -> Text Source # toEncodedUrlPiece :: Last a -> Builder Source # toHeader :: Last a -> ByteString Source # toQueryParam :: Last a -> Text Source #
ToHttpApiData a => ToHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: First a -> Text Source # toEncodedUrlPiece :: First a -> Builder Source # toHeader :: First a -> ByteString Source # toQueryParam :: First a -> Text Source #
ToHttpApiData a => ToHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Last a -> Text Source # toEncodedUrlPiece :: Last a -> Builder Source # toHeader :: Last a -> ByteString Source # toQueryParam :: Last a -> Text Source #
ToHttpApiData a => ToHttpApiData (Dual a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Dual a -> Text Source # toEncodedUrlPiece :: Dual a -> Builder Source # toHeader :: Dual a -> ByteString Source # toQueryParam :: Dual a -> Text Source #
ToHttpApiData a => ToHttpApiData (Sum a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Sum a -> Text Source # toEncodedUrlPiece :: Sum a -> Builder Source # toHeader :: Sum a -> ByteString Source # toQueryParam :: Sum a -> Text Source #
ToHttpApiData a => ToHttpApiData (Product a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Product a -> Text Source # toEncodedUrlPiece :: Product a -> Builder Source # toHeader :: Product a -> ByteString Source # toQueryParam :: Product a -> Text Source #

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

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

Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Either a b -> Text Source # toEncodedUrlPiece :: Either a b -> Builder Source # toHeader :: Either a b -> ByteString Source # toQueryParam :: Either a b -> Text Source #
ToHttpApiData a => ToHttpApiData (Tagged b a) |
Instance details Defined in Web.Internal.HttpApiData Methods toUrlPiece :: Tagged b a -> Text Source # toEncodedUrlPiece :: Tagged b a -> Builder Source # toHeader :: Tagged b a -> ByteString Source # toQueryParam :: Tagged b a -> Text Source #

class FromHttpApiData a where Source #

Parse value from HTTP API data.

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

Minimal complete definition

parseUrlPiece | parseQueryParam

Methods

parseUrlPiece :: Text -> Either Text a Source #

Parse URL path piece.

parseHeader :: ByteString -> Either Text a Source #

Parse HTTP header value.

parseQueryParam :: Text -> Either Text a Source #

Parse query param value.

Instances

FromHttpApiData Bool |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Bool Source # parseHeader :: ByteString -> Either Text Bool Source # parseQueryParam :: Text -> Either Text Bool Source #
FromHttpApiData Char |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Char Source # parseHeader :: ByteString -> Either Text Char Source # parseQueryParam :: Text -> Either Text Char Source #
FromHttpApiData Double |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Double Source # parseHeader :: ByteString -> Either Text Double Source # parseQueryParam :: Text -> Either Text Double Source #
FromHttpApiData Float |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Float Source # parseHeader :: ByteString -> Either Text Float Source # parseQueryParam :: Text -> Either Text Float Source #
FromHttpApiData Int |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int Source # parseHeader :: ByteString -> Either Text Int Source # parseQueryParam :: Text -> Either Text Int Source #
FromHttpApiData Int8 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int8 Source # parseHeader :: ByteString -> Either Text Int8 Source # parseQueryParam :: Text -> Either Text Int8 Source #
FromHttpApiData Int16 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int16 Source # parseHeader :: ByteString -> Either Text Int16 Source # parseQueryParam :: Text -> Either Text Int16 Source #
FromHttpApiData Int32 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int32 Source # parseHeader :: ByteString -> Either Text Int32 Source # parseQueryParam :: Text -> Either Text Int32 Source #
FromHttpApiData Int64 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Int64 Source # parseHeader :: ByteString -> Either Text Int64 Source # parseQueryParam :: Text -> Either Text Int64 Source #
FromHttpApiData Integer |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Integer Source # parseHeader :: ByteString -> Either Text Integer Source # parseQueryParam :: Text -> Either Text Integer Source #
FromHttpApiData Natural |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Natural Source # parseHeader :: ByteString -> Either Text Natural Source # parseQueryParam :: Text -> Either Text Natural Source #
FromHttpApiData Ordering |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Ordering Source # parseHeader :: ByteString -> Either Text Ordering Source # parseQueryParam :: Text -> Either Text Ordering Source #
FromHttpApiData Word |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word Source # parseHeader :: ByteString -> Either Text Word Source # parseQueryParam :: Text -> Either Text Word Source #
FromHttpApiData Word8 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word8 Source # parseHeader :: ByteString -> Either Text Word8 Source # parseQueryParam :: Text -> Either Text Word8 Source #
FromHttpApiData Word16 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word16 Source # parseHeader :: ByteString -> Either Text Word16 Source # parseQueryParam :: Text -> Either Text Word16 Source #
FromHttpApiData Word32 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word32 Source # parseHeader :: ByteString -> Either Text Word32 Source # parseQueryParam :: Text -> Either Text Word32 Source #
FromHttpApiData Word64 |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text Word64 Source # parseHeader :: ByteString -> Either Text Word64 Source # parseQueryParam :: Text -> Either Text Word64 Source #

FromHttpApiData ()

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

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text () Source # parseHeader :: ByteString -> Either Text () Source # parseQueryParam :: Text -> Either Text () Source #
FromHttpApiData String |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text String Source # parseHeader :: ByteString -> Either Text String Source # parseQueryParam :: Text -> Either Text String Source #

FromHttpApiData Version

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

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

FromHttpApiData UTCTime

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

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

FromHttpApiData ZonedTime

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

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

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

FromHttpApiData LocalTime

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

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

FromHttpApiData TimeOfDay

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

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

FromHttpApiData Day

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

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

FromHttpApiData SetCookie

Note: this instance works correctly for alphanumeric name and value

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

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

FromHttpApiData a => FromHttpApiData (Maybe a)

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

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Maybe a) Source # parseHeader :: ByteString -> Either Text (Maybe a) Source # parseQueryParam :: Text -> Either Text (Maybe a) Source #
HasResolution a => FromHttpApiData (Fixed a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Fixed a) Source # parseHeader :: ByteString -> Either Text (Fixed a) Source # parseQueryParam :: Text -> Either Text (Fixed a) Source #
FromHttpApiData a => FromHttpApiData (Min a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Min a) Source # parseHeader :: ByteString -> Either Text (Min a) Source # parseQueryParam :: Text -> Either Text (Min a) Source #
FromHttpApiData a => FromHttpApiData (Max a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Max a) Source # parseHeader :: ByteString -> Either Text (Max a) Source # parseQueryParam :: Text -> Either Text (Max a) Source #
FromHttpApiData a => FromHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (First a) Source # parseHeader :: ByteString -> Either Text (First a) Source # parseQueryParam :: Text -> Either Text (First a) Source #
FromHttpApiData a => FromHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Last a) Source # parseHeader :: ByteString -> Either Text (Last a) Source # parseQueryParam :: Text -> Either Text (Last a) Source #
FromHttpApiData a => FromHttpApiData (First a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (First a) Source # parseHeader :: ByteString -> Either Text (First a) Source # parseQueryParam :: Text -> Either Text (First a) Source #
FromHttpApiData a => FromHttpApiData (Last a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Last a) Source # parseHeader :: ByteString -> Either Text (Last a) Source # parseQueryParam :: Text -> Either Text (Last a) Source #
FromHttpApiData a => FromHttpApiData (Dual a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Dual a) Source # parseHeader :: ByteString -> Either Text (Dual a) Source # parseQueryParam :: Text -> Either Text (Dual a) Source #
FromHttpApiData a => FromHttpApiData (Sum a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Sum a) Source # parseHeader :: ByteString -> Either Text (Sum a) Source # parseQueryParam :: Text -> Either Text (Sum a) Source #
FromHttpApiData a => FromHttpApiData (Product a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Product a) Source # parseHeader :: ByteString -> Either Text (Product a) Source # parseQueryParam :: Text -> Either Text (Product a) Source #
FromHttpApiData a => FromHttpApiData (LenientData a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (LenientData a) Source # parseHeader :: ByteString -> Either Text (LenientData a) Source # parseQueryParam :: Text -> Either Text (LenientData a) Source #

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

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

Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Either a b) Source # parseHeader :: ByteString -> Either Text (Either a b) Source # parseQueryParam :: Text -> Either Text (Either a b) Source #
FromHttpApiData a => FromHttpApiData (Tagged b a) |
Instance details Defined in Web.Internal.HttpApiData Methods parseUrlPiece :: Text -> Either Text (Tagged b a) Source # parseHeader :: ByteString -> Either Text (Tagged b a) Source # parseQueryParam :: Text -> Either Text (Tagged b a) Source #

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

# Experimental modules

data AuthProtect (tag :: k) Source #

A generalized Authentication combinator. Use this if you have a non-standard authentication technique.

NOTE: THIS API IS EXPERIMENTAL AND SUBJECT TO CHANGE.

Instances

HasLink sub => HasLink (AuthProtect tag :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (AuthProtect tag :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (AuthProtect tag :> sub) -> Link -> MkLink (AuthProtect tag :> sub) a Source #
type MkLink (AuthProtect tag :> sub :: Type) a Source # |
Instance details Defined in Servant.Links type MkLink (AuthProtect tag :> sub :: Type) a = MkLink sub a

General Authentication

# Links

data URI Source #

Represents a general universal resource identifier using its component parts.

For example, for the URI

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

the components are:

Constructors

URI |

Fields

- uriScheme :: String

      foo:

- uriAuthority :: Maybe URIAuth

      //anonymous@www.haskell.org:42

- uriPath :: String

      /ghc

- uriQuery :: String

      ?query

- uriFragment :: String

      #frag

Instances

Eq URI |
Instance details Defined in Network.URI Methods (==) :: URI -> URI -> Bool Source # (/=) :: URI -> URI -> Bool Source #
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 Source #

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

toConstr :: URI -> Constr Source #

dataTypeOf :: URI -> DataType Source #

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

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

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

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

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

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

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

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

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

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

Ord URI |
Instance details Defined in Network.URI Methods compare :: URI -> URI -> Ordering Source # (<) :: URI -> URI -> Bool Source # (<=) :: URI -> URI -> Bool Source # (>) :: URI -> URI -> Bool Source # (>=) :: URI -> URI -> Bool Source # max :: URI -> URI -> URI Source # min :: URI -> URI -> URI Source #
Show URI |
Instance details Defined in Network.URI Methods showsPrec :: Int -> URI -> ShowS Source # show :: URI -> String Source # showList :: [URI] -> ShowS Source #
Generic URI |
Instance details Defined in Network.URI Associated Types type Rep URI :: Type -> Type Source # Methods from :: URI -> Rep URI x Source # to :: Rep URI x -> URI Source #
NFData URI |
Instance details Defined in Network.URI Methods rnf :: URI -> () Source #
type Rep URI |

Instance details

Defined in Network.URI

type Rep URI = D1 (MetaData "URI" "Network.URI" "network-uri-2.6.1.0-K75fCYvLQE41EntOQ30cqK" 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)))))

type family IsElem endpoint api :: Constraint 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 deduce...
    ...

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 (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 (Verb m s ct typ) (Verb m s ct' typ) = IsSubList ct ct' |
IsElem e e = () |
IsElem e a = IsElem' e a |

type family IsElem' a s :: Constraint 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.

class HasLink endpoint where Source #

Construct a toLink for an endpoint.

Associated Types

type MkLink endpoint (a :: *) Source #

Methods

toLink Source #

Arguments

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

Instances

HasLink EmptyAPI Source # |
Instance details Defined in Servant.Links Associated Types type MkLink EmptyAPI a :: Type Source # Methods toLink :: (Link -> a) -> Proxy EmptyAPI -> Link -> MkLink EmptyAPI a Source #
HasLink Raw Source # |
Instance details Defined in Servant.Links Associated Types type MkLink Raw a :: Type Source # Methods toLink :: (Link -> a) -> Proxy Raw -> Link -> MkLink Raw a Source #
(HasLink a, HasLink b) => HasLink (a :<|> b :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (a :<|> b) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (a :<|> b) -> Link -> MkLink (a :<|> b) a0 Source #
HasLink sub => HasLink (HttpVersion :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (HttpVersion :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (HttpVersion :> sub) -> Link -> MkLink (HttpVersion :> sub) a Source #
HasLink sub => HasLink (Vault :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Vault :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Vault :> sub) -> Link -> MkLink (Vault :> sub) a Source #
HasLink sub => HasLink (BasicAuth realm a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (BasicAuth realm a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (BasicAuth realm a :> sub) -> Link -> MkLink (BasicAuth realm a :> sub) a0 Source #
(ToHttpApiData v, HasLink sub) => HasLink (CaptureAll sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (CaptureAll sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (CaptureAll sym v :> sub) -> Link -> MkLink (CaptureAll sym v :> sub) a Source #
(ToHttpApiData v, HasLink sub) => HasLink (Capture' mods sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Capture' mods sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Capture' mods sym v :> sub) -> Link -> MkLink (Capture' mods sym v :> sub) a Source #
HasLink sub => HasLink (Description s :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Description s :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Description s :> sub) -> Link -> MkLink (Description s :> sub) a Source #
HasLink sub => HasLink (Summary s :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Summary s :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (Summary s :> sub) -> Link -> MkLink (Summary s :> sub) a Source #
HasLink sub => HasLink (AuthProtect tag :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (AuthProtect tag :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (AuthProtect tag :> sub) -> Link -> MkLink (AuthProtect tag :> sub) a Source #
HasLink sub => HasLink (IsSecure :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (IsSecure :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (IsSecure :> sub) -> Link -> MkLink (IsSecure :> sub) a Source #
HasLink sub => HasLink (Header' mods sym a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Header' mods sym a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (Header' mods sym a :> sub) -> Link -> MkLink (Header' mods sym a :> sub) a0 Source #
(KnownSymbol sym, HasLink sub) => HasLink (QueryFlag sym :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryFlag sym :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryFlag sym :> sub) -> Link -> MkLink (QueryFlag sym :> sub) a Source #
(KnownSymbol sym, ToHttpApiData v, HasLink sub) => HasLink (QueryParams sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryParams sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryParams sym v :> sub) -> Link -> MkLink (QueryParams sym v :> sub) a Source #
(KnownSymbol sym, ToHttpApiData v, HasLink sub, SBoolI (FoldRequired mods)) => HasLink (QueryParam' mods sym v :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (QueryParam' mods sym v :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (QueryParam' mods sym v :> sub) -> Link -> MkLink (QueryParam' mods sym v :> sub) a Source #
HasLink sub => HasLink (RemoteHost :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (RemoteHost :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (RemoteHost :> sub) -> Link -> MkLink (RemoteHost :> sub) a Source #
HasLink sub => HasLink (ReqBody' mods ct a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (ReqBody' mods ct a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (ReqBody' mods ct a :> sub) -> Link -> MkLink (ReqBody' mods ct a :> sub) a0 Source #
HasLink sub => HasLink (StreamBody' mods framing ct a :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (StreamBody' mods framing ct a :> sub) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (StreamBody' mods framing ct a :> sub) -> Link -> MkLink (StreamBody' mods framing ct a :> sub) a0 Source #
(KnownSymbol sym, HasLink sub) => HasLink (sym :> sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (sym :> sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (sym :> sub) -> Link -> MkLink (sym :> sub) a Source #
HasLink sub => HasLink (WithNamedContext name context sub :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (WithNamedContext name context sub) a :: Type Source # Methods toLink :: (Link -> a) -> Proxy (WithNamedContext name context sub) -> Link -> MkLink (WithNamedContext name context sub) a Source #
HasLink (Verb m s ct a :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Verb m s ct a) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (Verb m s ct a) -> Link -> MkLink (Verb m s ct a) a0 Source #
HasLink (Stream m status fr ct a :: Type) Source # |
Instance details Defined in Servant.Links Associated Types type MkLink (Stream m status fr ct a) a :: Type Source # Methods toLink :: (Link -> a0) -> Proxy (Stream m status fr ct a) -> Link -> MkLink (Stream m status fr ct a) a0 Source #

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

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

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-safe internal URIs

# Re-exports

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

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

Equations

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

data SBool (b :: Bool) where Source #

Constructors

STrue :: forall (b :: Bool). SBool True |
SFalse :: forall (b :: Bool). SBool False |

class SBoolI (b :: Bool) where Source #

Methods

sbool :: SBool b Source #

Instances

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