Safe Haskell | None |
---|---|
Language | Haskell2010 |
Servant.API.UVerb
Description
An alternative to Verb
for end-points that respond with a resource value of any of an
open union of types, and specific status codes for each type in this union. (UVerb
is
short for UnionVerb
)
This can be used for returning (rather than throwing) exceptions in a server as in, say
'[Report, WaiError]
; or responding with either a 303 forward with a location header, or
201 created with a different body type, depending on the circumstances. (All of this can
be done with vanilla servant-server by throwing exceptions, but it can't be represented in
the API types without something like UVerb
.)
See https://docs.servant.dev/en/stable/cookbook/uverb/UVerb.html for a working example.
Synopsis
- data UVerb (method :: StdMethod) (contentTypes :: [Type]) (as :: [Type])
- class KnownStatus (StatusOf a) => HasStatus a where
- type StatusOf a :: Nat
- statusOf :: HasStatus a => proxy a -> Status
- class HasStatuses (as :: [Type]) where
- newtype WithStatus (k :: Nat) a = WithStatus a
- module Servant.API.UVerb.Union
Documentation
data UVerb (method :: StdMethod) (contentTypes :: [Type]) (as :: [Type]) Source #
A variant of Verb
that can have any of a number of response values and status codes.
FUTUREWORK: it would be nice to make Verb
a special case of UVerb
, and only write
instances for HasServer
etc. for the latter, getting them for the former for free.
Something like:
type Verb method statusCode contentTypes a = UVerb method contentTypes [WithStatus statusCode a]
Backwards compatibility is tricky, though: this type alias would mean people would have to
use respond
instead of pure
or return
, so all old handlers would have to be rewritten.
Instances
HasLink (UVerb m ct a :: Type) Source # | |
AtMostOneFragment (UVerb m cts as) Source # | |
Defined in Servant.API.TypeLevel | |
type MkLink (UVerb m ct a :: Type) r Source # | |
Defined in Servant.Links |
class KnownStatus (StatusOf a) => HasStatus a Source #
Instances
HasStatus NoContent Source # | If an API can respond with | ||||
Defined in Servant.API.UVerb Associated Types
| |||||
HasStatus a => HasStatus (Headers ls a) Source # | |||||
Defined in Servant.API.UVerb | |||||
KnownStatus n => HasStatus (WithStatus n a) Source # | an instance of this typeclass assigns a HTTP status code to a return type Example: data NotFoundError = NotFoundError String instance HasStatus NotFoundError where type StatusOf NotFoundError = 404 You can also use the convience newtype wrapper | ||||
Defined in Servant.API.UVerb Associated Types
|
class HasStatuses (as :: [Type]) where Source #
Instances
HasStatuses ('[] :: [Type]) Source # | |||||
Defined in Servant.API.UVerb Associated Types
| |||||
(HasStatus a, HasStatuses as) => HasStatuses (a ': as) Source # | |||||
Defined in Servant.API.UVerb Associated Types
|
newtype WithStatus (k :: Nat) a Source #
A simple newtype wrapper that pairs a type with its status code. It implements all the content types that Servant ships with by default.
Constructors
WithStatus a |
Instances
MimeRender FormUrlEncoded a => MimeRender FormUrlEncoded (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeRender :: Proxy FormUrlEncoded -> WithStatus _status a -> ByteString Source # | |||||
MimeRender JSON a => MimeRender JSON (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeRender :: Proxy JSON -> WithStatus _status a -> ByteString Source # | |||||
MimeRender OctetStream a => MimeRender OctetStream (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeRender :: Proxy OctetStream -> WithStatus _status a -> ByteString Source # | |||||
MimeRender PlainText a => MimeRender PlainText (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeRender :: Proxy PlainText -> WithStatus _status a -> ByteString Source # | |||||
MimeUnrender FormUrlEncoded a => MimeUnrender FormUrlEncoded (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy FormUrlEncoded -> ByteString -> Either String (WithStatus _status a) Source # mimeUnrenderWithType :: Proxy FormUrlEncoded -> MediaType -> ByteString -> Either String (WithStatus _status a) Source # | |||||
MimeUnrender JSON a => MimeUnrender JSON (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy JSON -> ByteString -> Either String (WithStatus _status a) Source # mimeUnrenderWithType :: Proxy JSON -> MediaType -> ByteString -> Either String (WithStatus _status a) Source # | |||||
MimeUnrender OctetStream a => MimeUnrender OctetStream (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy OctetStream -> ByteString -> Either String (WithStatus _status a) Source # mimeUnrenderWithType :: Proxy OctetStream -> MediaType -> ByteString -> Either String (WithStatus _status a) Source # | |||||
MimeUnrender PlainText a => MimeUnrender PlainText (WithStatus _status a) Source # | |||||
Defined in Servant.API.UVerb Methods mimeUnrender :: Proxy PlainText -> ByteString -> Either String (WithStatus _status a) Source # mimeUnrenderWithType :: Proxy PlainText -> MediaType -> ByteString -> Either String (WithStatus _status a) Source # | |||||
Show a => Show (WithStatus k a) Source # | |||||
Defined in Servant.API.UVerb Methods showsPrec :: Int -> WithStatus k a -> ShowS show :: WithStatus k a -> String showList :: [WithStatus k a] -> ShowS | |||||
Eq a => Eq (WithStatus k a) Source # | |||||
Defined in Servant.API.UVerb Methods (==) :: WithStatus k a -> WithStatus k a -> Bool (/=) :: WithStatus k a -> WithStatus k a -> Bool | |||||
KnownStatus n => HasStatus (WithStatus n a) Source # | an instance of this typeclass assigns a HTTP status code to a return type Example: data NotFoundError = NotFoundError String instance HasStatus NotFoundError where type StatusOf NotFoundError = 404 You can also use the convience newtype wrapper | ||||
Defined in Servant.API.UVerb Associated Types
| |||||
type StatusOf (WithStatus n a) Source # | |||||
Defined in Servant.API.UVerb |
module Servant.API.UVerb.Union