bc3f61d615
Changes Header, ReqBody and QueryParam to take a modifier list. Resolves https://github.com/haskell-servant/servant/issues/856 ResponseHeader story turns to be somewhat ugly, but it can be made elegant when https://github.com/haskell-servant/servant/issues/841 is implemnted, then we can omit HList aka Header Heterogenous List implementation. - servant-server changes: Writing server side intepretations is quite simple using `unfoldRequestArgument`, which makes Header and QueryParam look quite the same. `ReqBody` cannot be easily made optional with current design (what that would mean: No Content-Type Header?), so that dimensions isn't used there. - Add HasLink for all the rest ComprehensiveAPI combinators - Add 'tricky' Header', QueryParam' endpoints to ComprehensiveAPI - servant-docs: Quick'n'dirty implementation. Don't use modifiers information (yet).
137 lines
6.4 KiB
Haskell
137 lines
6.4 KiB
Haskell
module Servant.API (
|
|
|
|
-- * Combinators
|
|
module Servant.API.Sub,
|
|
-- | Type-level combinator for expressing subrouting: @':>'@
|
|
module Servant.API.Alternative,
|
|
-- | Type-level combinator for alternative endpoints: @':<|>'@
|
|
module Servant.API.Empty,
|
|
-- | Type-level combinator for an empty API: @'EmptyAPI'@
|
|
module Servant.API.Modifiers,
|
|
-- | Type-level modifiers for 'QueryParam', 'Header' and 'ReqBody'.
|
|
|
|
-- * Accessing information from the request
|
|
module Servant.API.Capture,
|
|
-- | Capturing parts of the url path as parsed values: @'Capture'@ and @'CaptureAll'@
|
|
module Servant.API.Header,
|
|
-- | Retrieving specific headers from the request
|
|
module Servant.API.HttpVersion,
|
|
-- | Retrieving the HTTP version of the request
|
|
module Servant.API.QueryParam,
|
|
-- | Retrieving parameters from the query string of the 'URI': @'QueryParam'@
|
|
module Servant.API.ReqBody,
|
|
-- | Accessing the request body as a JSON-encoded type: @'ReqBody'@
|
|
module Servant.API.RemoteHost,
|
|
-- | Retrieving the IP of the client
|
|
module Servant.API.IsSecure,
|
|
-- | Is the request made through HTTPS?
|
|
module Servant.API.Vault,
|
|
-- | Access the location for arbitrary data to be shared by applications and middleware
|
|
module Servant.API.WithNamedContext,
|
|
-- | Access context entries in combinators in servant-server
|
|
|
|
-- * Actual endpoints, distinguished by HTTP method
|
|
module Servant.API.Verbs,
|
|
|
|
-- * Streaming endpoints, distinguished by HTTP method
|
|
module Servant.API.Stream,
|
|
|
|
-- * Authentication
|
|
module Servant.API.BasicAuth,
|
|
|
|
-- * Endpoints description
|
|
module Servant.API.Description,
|
|
|
|
-- * Content Types
|
|
module Servant.API.ContentTypes,
|
|
-- | Serializing and deserializing types based on @Accept@ and
|
|
-- @Content-Type@ headers.
|
|
|
|
-- * Response Headers
|
|
module Servant.API.ResponseHeaders,
|
|
|
|
-- * Untyped endpoints
|
|
module Servant.API.Raw,
|
|
-- | Plugging in a wai 'Network.Wai.Application', serving directories
|
|
|
|
-- * FromHttpApiData and ToHttpApiData
|
|
module Web.HttpApiData,
|
|
-- | Classes and instances for types that can be converted to and from HTTP API data.
|
|
|
|
|
|
-- * Experimental modules
|
|
module Servant.API.Experimental.Auth,
|
|
-- | General Authentication
|
|
|
|
-- * Utilities
|
|
module Servant.Utils.Links,
|
|
-- | Type-safe internal URIs
|
|
|
|
-- * Re-exports
|
|
If,
|
|
SBool (..), SBoolI (..)
|
|
) where
|
|
|
|
import Servant.API.Alternative ((:<|>) (..))
|
|
import Servant.API.BasicAuth (BasicAuth,BasicAuthData(..))
|
|
import Servant.API.Capture (Capture, CaptureAll)
|
|
import Servant.API.ContentTypes (Accept (..), FormUrlEncoded,
|
|
JSON,
|
|
MimeRender (..), NoContent (NoContent),
|
|
MimeUnrender (..), OctetStream,
|
|
PlainText)
|
|
import Servant.API.Description (Description, Summary)
|
|
import Servant.API.Empty (EmptyAPI (..))
|
|
import Servant.API.Experimental.Auth (AuthProtect)
|
|
import Servant.API.Header (Header, Header')
|
|
import Servant.API.HttpVersion (HttpVersion (..))
|
|
import Servant.API.IsSecure (IsSecure (..))
|
|
import Servant.API.Modifiers (Required, Optional, Lenient, Strict)
|
|
import Servant.API.QueryParam (QueryFlag, QueryParam, QueryParam',
|
|
QueryParams)
|
|
import Servant.API.Raw (Raw)
|
|
import Servant.API.Stream (Stream, StreamGet, StreamPost,
|
|
StreamGenerator (..),
|
|
ToStreamGenerator (..),
|
|
ResultStream(..), BuildFromStream (..),
|
|
ByteStringParser (..),
|
|
FramingRender (..), BoundaryStrategy (..),
|
|
FramingUnrender (..),
|
|
NewlineFraming,
|
|
NetstringFraming)
|
|
import Servant.API.RemoteHost (RemoteHost)
|
|
import Servant.API.ReqBody (ReqBody, ReqBody')
|
|
import Servant.API.ResponseHeaders (AddHeader, addHeader, noHeader,
|
|
BuildHeadersTo (buildHeadersTo),
|
|
GetHeaders (getHeaders),
|
|
HList (..), Headers (..),
|
|
getHeadersHList, getResponse, ResponseHeader (..))
|
|
import Servant.API.Sub ((:>))
|
|
import Servant.API.Vault (Vault)
|
|
import Servant.API.Verbs (PostCreated, Delete, DeleteAccepted,
|
|
DeleteNoContent,
|
|
DeleteNonAuthoritative, Get,
|
|
GetAccepted, GetNoContent,
|
|
GetNonAuthoritative,
|
|
GetPartialContent,
|
|
GetResetContent,
|
|
Patch,
|
|
PatchAccepted, PatchNoContent,
|
|
PatchNoContent,
|
|
PatchNonAuthoritative, Post,
|
|
PostAccepted, PostNoContent,
|
|
PostNonAuthoritative,
|
|
PostResetContent, Put,
|
|
PutAccepted, PutNoContent,
|
|
PutNoContent, PutNonAuthoritative,
|
|
ReflectMethod (reflectMethod),
|
|
Verb, StdMethod(..))
|
|
import Servant.API.WithNamedContext (WithNamedContext)
|
|
import Servant.Utils.Links (HasLink (..), Link, IsElem, IsElem',
|
|
URI (..), safeLink)
|
|
import Web.HttpApiData (FromHttpApiData (..),
|
|
ToHttpApiData (..))
|
|
|
|
import Data.Type.Bool (If)
|
|
import Data.Singletons.Bool (SBool (..), SBoolI (..))
|