-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A value level web framework
--
-- A value level web framework in the style of servant
@package eved
@version 0.0.2.0
module Web.Eved.ContentType
data ContentType a
ContentType :: (a -> (RequestHeaders, ByteString)) -> ((RequestHeaders, ByteString) -> Either Text a) -> NonEmpty MediaType -> ContentType a
[toContentType] :: ContentType a -> a -> (RequestHeaders, ByteString)
[fromContentType] :: ContentType a -> (RequestHeaders, ByteString) -> Either Text a
[mediaTypes] :: ContentType a -> NonEmpty MediaType
json :: (FromJSON a, ToJSON a, Applicative f) => f (ContentType a)
data WithHeaders a
WithHeaders :: RequestHeaders -> a -> WithHeaders a
addHeaders :: RequestHeaders -> a -> WithHeaders a
withHeaders :: Functor f => f (ContentType a) -> f (ContentType (WithHeaders a))
acceptHeader :: NonEmpty (ContentType a) -> Header
contentTypeHeader :: ContentType a -> Header
collectMediaTypes :: (ContentType a -> MediaType -> b) -> NonEmpty (ContentType a) -> [b]
chooseAcceptCType :: NonEmpty (ContentType a) -> ByteString -> Maybe (MediaType, a -> (RequestHeaders, ByteString))
chooseContentCType :: NonEmpty (ContentType a) -> RequestHeaders -> ByteString -> Maybe (ByteString -> Either Text a)
module Web.Eved.Header
data Header a
Header :: (a -> Maybe ByteString) -> (Maybe ByteString -> Either Text a) -> Header a
[toHeaderValue] :: Header a -> a -> Maybe ByteString
[fromHeaderValue] :: Header a -> Maybe ByteString -> Either Text a
auto :: (Applicative f, ToHttpApiData a, FromHttpApiData a) => f (Header a)
maybe :: Functor f => f (Header a) -> f (Header (Maybe a))
module Web.Eved.QueryParam
data QueryParam a
QueryParam :: ([Text] -> Either Text a) -> (a -> [Text]) -> QueryParam a
[fromQueryParam] :: QueryParam a -> [Text] -> Either Text a
[toQueryParam] :: QueryParam a -> a -> [Text]
auto :: (Applicative f, FromHttpApiData a, ToHttpApiData a) => f (QueryParam a)
list :: Functor f => f (QueryParam a) -> f (QueryParam [a])
defaulted :: Functor f => a -> f (QueryParam a) -> f (QueryParam a)
maybe :: Functor f => f (QueryParam a) -> f (QueryParam (Maybe a))
integer :: Applicative f => f (QueryParam Integer)
text :: Applicative f => f (QueryParam Text)
module Web.Eved.UrlElement
data UrlElement a
UrlElement :: (Text -> Either Text a) -> (a -> Text) -> UrlElement a
[fromUrlPiece] :: UrlElement a -> Text -> Either Text a
[toUrlPiece] :: UrlElement a -> a -> Text
auto :: (FromHttpApiData a, ToHttpApiData a, Applicative f) => f (UrlElement a)
integer :: Applicative f => f (UrlElement Integer)
text :: Applicative f => f (UrlElement Text)
module Web.Eved.Internal
data (:<|>) a b
(:<|>) :: a -> b -> (:<|>) a b
infixl 4 :<|>
infixl 4 :<|>
class Eved api m | api -> m
(.<|>) :: Eved api m => api a -> api b -> api (a :<|> b)
lit :: Eved api m => Text -> api a -> api a
capture :: Eved api m => Text -> UrlElement a -> api b -> api (a -> b)
reqBody :: Eved api m => NonEmpty (ContentType a) -> api b -> api (a -> b)
queryParam :: Eved api m => Text -> QueryParam a -> api b -> api (a -> b)
header :: Eved api m => Text -> Header a -> api b -> api (a -> b)
verb :: Eved api m => StdMethod -> Status -> NonEmpty (ContentType a) -> api (m a)
module Web.Eved.Server
data RequestData a
BodyRequestData :: (ByteString -> Either Text a) -> RequestData a
PureRequestData :: a -> RequestData a
newtype EvedServerT m a
EvedServerT :: ((forall a. m a -> IO a) -> [Text] -> RequestData a -> Application) -> EvedServerT m a
[unEvedServerT] :: EvedServerT m a -> (forall a. m a -> IO a) -> [Text] -> RequestData a -> Application
server :: (forall a. m a -> IO a) -> a -> EvedServerT m a -> Application
data RoutingError
PathError :: RoutingError
CaptureError :: Text -> RoutingError
HeaderParseError :: Text -> RoutingError
QueryParamParseError :: Text -> RoutingError
NoContentMatchError :: RoutingError
NoAcceptMatchError :: RoutingError
NoMethodMatchError :: RoutingError
newtype UserApplicationError a
UserApplicationError :: a -> UserApplicationError a
serverErrorToResponse :: ServerError -> Response
data ServerError
ServerError :: Status -> ByteString -> [Header] -> ServerError
[errorStatus] :: ServerError -> Status
[errorBody] :: ServerError -> ByteString
[errorHeaders] :: ServerError -> [Header]
defaultErrorHandler :: SomeException -> ServerError
instance GHC.Base.Functor Web.Eved.Server.RequestData
instance GHC.Classes.Ord Web.Eved.Server.RoutingError
instance GHC.Classes.Eq Web.Eved.Server.RoutingError
instance GHC.Show.Show Web.Eved.Server.RoutingError
instance GHC.Show.Show a => GHC.Show.Show (Web.Eved.Server.UserApplicationError a)
instance GHC.Show.Show Web.Eved.Server.ServerError
instance Web.Eved.Internal.Eved (Web.Eved.Server.EvedServerT m) m
instance GHC.Exception.Type.Exception Web.Eved.Server.ServerError
instance GHC.Exception.Type.Exception a => GHC.Exception.Type.Exception (Web.Eved.Server.UserApplicationError a)
instance GHC.Exception.Type.Exception Web.Eved.Server.RoutingError
module Web.Eved.Options
provideOptions :: EvedOptions m a -> Middleware
getOptionsResponse :: EvedOptions m a -> Request -> Response
newtype EvedOptions (m :: * -> *) a
EvedOptions :: ([Text] -> [StdMethod]) -> EvedOptions (m :: * -> *) a
[getAvailableMethods] :: EvedOptions (m :: * -> *) a -> [Text] -> [StdMethod]
passthrough :: EvedOptions m a -> EvedOptions m b
instance Web.Eved.Internal.Eved (Web.Eved.Options.EvedOptions m) m
module Web.Eved.Client
newtype ClientM a
ClientM :: ReaderT Manager IO a -> ClientM a
[unClientM] :: ClientM a -> ReaderT Manager IO a
runClientIO :: ClientM a -> IO a
runClient :: (MonadIO m, MonadReader env m, HasHttpManager env) => ClientM a -> m a
newtype EvedClient a
EvedClient :: (Request -> a) -> EvedClient a
[client] :: EvedClient a -> Request -> a
getClient :: EvedClient a -> Text -> a
instance Web.Eved.Internal.Eved Web.Eved.Client.EvedClient Web.Eved.Client.ClientM
module Web.Eved.Auth
auth :: (Eved api m, EvedAuth api, Applicative f) => NonEmpty (f (AuthScheme a)) -> f (api b) -> f (api (a -> b))
class EvedAuth api
auth_ :: EvedAuth api => NonEmpty (AuthScheme a) -> api b -> api (a -> b)
data AuthResult a
AuthSuccess :: a -> AuthResult a
AuthFailure :: Text -> AuthResult a
AuthNeeded :: AuthResult a
data AuthScheme a
AuthScheme :: (Request -> IO (AuthResult a)) -> (a -> Request -> Request) -> AuthScheme a
[authenticateRequest] :: AuthScheme a -> Request -> IO (AuthResult a)
[addCredentials] :: AuthScheme a -> a -> Request -> Request
data BasicAuth
BasicAuth :: Text -> Text -> BasicAuth
[basicAuthUsername] :: BasicAuth -> Text
[basicAuthPassword] :: BasicAuth -> Text
basicAuth :: AuthScheme BasicAuth
instance Web.Eved.Auth.EvedAuth Web.Eved.Client.EvedClient
instance Web.Eved.Auth.EvedAuth (Web.Eved.Server.EvedServerT m)
module Web.Eved
class Eved api m | api -> m
data (:<|>) a b
(:<|>) :: a -> b -> (:<|>) a b
infixl 4 :<|>
infixl 4 :<|>
-- | A Segment seperator to be used between path segments akin to / in a
-- url e.g. lit "hello" ./ capture "name" UE.text ./ get
-- [CT.json @Text]
(.>) :: (Applicative f, Eved api m) => (f (api a) -> f (api b)) -> f (api a) -> f (api b)
infixr 5 .>
-- | Combine two sub-api's by trying the left api first and then the right
-- api second.
(.<|>) :: (Eved api m, Applicative f) => f (api a) -> f (api b) -> f (api (a :<|> b))
-- | Add a Literal string to the path of the api
lit :: (Eved api m, Applicative f) => Text -> f (api a) -> f (api a)
-- | Add a url capture with a given name and UrlElement decoder/encoder
capture :: (Eved api m, Applicative f) => Text -> f (UrlElement a) -> f (api b) -> f (api (a -> b))
-- | Add a request body parser for the given content types The Content-Type
-- header will be examined to assist in content negotiation.
reqBody :: (Eved api m, Applicative f) => NonEmpty (f (ContentType a)) -> f (api b) -> f (api (a -> b))
-- | A single query param that is required to exist. If the argument is not
-- required use QP.maybe
queryParam :: (Eved api m, Applicative f) => Text -> f (QueryParam a) -> f (api b) -> f (api (a -> b))
-- | The leaf node of most routes, this will specify the HTTP Verb and
-- Status along with a list of ContentType encoder/decoders. The Allow
-- header in the request will be examined to determine a suitable
-- response Content-Type
verb :: (Eved api m, Applicative f) => StdMethod -> Status -> NonEmpty (f (ContentType a)) -> f (api (m a))
-- | HTTP GET -- see verb for more info
get :: (Eved api m, Applicative f) => NonEmpty (f (ContentType a)) -> f (api (m a))
-- | HTTP POST -- see verb for more info
post :: (Eved api m, Applicative f) => NonEmpty (f (ContentType a)) -> f (api (m a))
-- | HTTP PUT -- see verb for more info
put :: (Eved api m, Applicative f) => NonEmpty (f (ContentType a)) -> f (api (m a))
-- | HTTP PATCH -- see verb for more info
patch :: (Eved api m, Applicative f) => NonEmpty (f (ContentType a)) -> f (api (m a))
-- | HTTP DELETE -- see verb for more info
delete :: (Eved api m, Applicative f) => NonEmpty (f (ContentType a)) -> f (api (m a))
runClientIO :: ClientM a -> IO a
runClient :: (MonadIO m, MonadReader env m, HasHttpManager env) => ClientM a -> m a
-- | Unwrap an api that requires no context. If none of the combinators
-- that were used required any context use this function to unwrap the
-- api
noContext :: Eved api m => Identity (api a) -> api a
withContext :: Eved api m => ctx -> (ctx -> api a) -> api a
data ClientM a
data EvedServerT m a
server :: (forall a. m a -> IO a) -> a -> EvedServerT m a -> Application