-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | WAI based library for web api -- -- WAI based library for web api @package webapi @version 0.3 module WebApi.Util class ToHListRecTuple (xs :: [*]) toRecTuple :: ToHListRecTuple xs => Proxy xs -> HListToTuple xs -> HListToRecTuple xs fromRecTuple :: ToHListRecTuple xs => Proxy xs -> HListToRecTuple xs -> HListToTuple xs instance WebApi.Util.ToHListRecTuple '[] instance (WebApi.Util.HListToRecTuple '[p1] ~ (p1, ())) => WebApi.Util.ToHListRecTuple '[p1] instance WebApi.Util.ToHListRecTuple '[p1, p2] instance WebApi.Util.ToHListRecTuple '[p1, p2, p3] instance WebApi.Util.ToHListRecTuple '[p1, p2, p3, p4] instance WebApi.Util.ToHListRecTuple '[p1, p2, p3, p4, p5] instance WebApi.Util.ToHListRecTuple '[p1, p2, p3, p4, p5, p6] instance WebApi.Util.ToHListRecTuple '[p1, p2, p3, p4, p5, p6, p7] instance WebApi.Util.ToHListRecTuple '[p1, p2, p3, p4, p5, p6, p7, p8] instance WebApi.Util.ToHListRecTuple '[p1, p2, p3, p4, p5, p6, p7, p8, p9] -- | Defines various types to represent the HTTP methods. module WebApi.Method -- | Type representing a GET method. data GET -- | Type representing a POST method. data POST -- | Type representing a PUT method. data PUT -- | Type representing a DELETE method. data DELETE -- | Type representing a HEAD method. data HEAD -- | Type representing a PATCH method. data PATCH -- | Type representing a TRACE method. data TRACE -- | Type representing a OPTIONS method. data OPTIONS -- | Type representing a CONNECT method. data CONNECT -- | Type representing a Custom method. data CUSTOM (m :: Symbol) -- | Singleton class for method types. class SingMethod (meth :: *) singMethod :: SingMethod meth => Proxy meth -> Method instance WebApi.Method.SingMethod WebApi.Method.GET instance WebApi.Method.SingMethod WebApi.Method.POST instance WebApi.Method.SingMethod WebApi.Method.PUT instance WebApi.Method.SingMethod WebApi.Method.DELETE instance WebApi.Method.SingMethod WebApi.Method.OPTIONS instance WebApi.Method.SingMethod WebApi.Method.HEAD instance WebApi.Method.SingMethod WebApi.Method.TRACE instance WebApi.Method.SingMethod WebApi.Method.PATCH instance WebApi.Method.SingMethod WebApi.Method.CONNECT instance GHC.TypeLits.KnownSymbol m => WebApi.Method.SingMethod (WebApi.Method.CUSTOM m) -- | Param serialization and deserialization. ToParam and -- EncodeParam are responsible for serialization part. -- EncodeParam converts the value into a wire format. -- ToParam is responsible for creating (nested) key value pairs, -- which can be then used to deserialize to original type. For example -- --
--   encodeParam 5 == "5"
--   
--   data Foo = Foo { foo :: Int }
--            deriving (Show, Eq, Generic)
--   
--   data Bar = Bar { bar :: Foo }
--            deriving (Show, Eq, Generic)
--   
--   instance ToParam Foo 'FormParam
--   instance ToParam Bar 'FormParam
--   
--   toParam (Proxy :: Proxy 'FormParam) "" (Bar (Foo 5)) == [("bar.foo","5")]
--   
-- -- Deserialization works analogously, FromParam and -- DecodeParam are counterparts to ToParam and -- EncodeParam respectively. Generic instances are provided for -- all of them. This means that the user only need to derive Generic in -- their type, and provide instance with an empty body. Note that for -- headers FromHeader and ToHeader is being used in place -- of FromParam and ToParam. Nesting is not supported for -- headers. module WebApi.Param -- | Serialize a type to a given type of kind ParamK. class ToParam (parK :: ParamK) a where toParam pt pfx = gtoParam pt pfx (ParamAcc 0 False) defaultParamSettings . from toParam :: ToParam parK a => Proxy (parK :: ParamK) -> ByteString -> a -> [SerializedData parK] -- | Serialize a type to ByteString. class EncodeParam (t :: *) where encodeParam = gEncodeParam . from encodeParam :: EncodeParam t => t -> ByteString -- | Serialize a type to the header params class ToHeader a where toHeader = gtoHeader "" (ParamAcc 0 False) defaultParamSettings . from toHeader :: ToHeader a => a -> [Header] -- | Define result of serialization of a type of kind ParamK. -- | Serialize a type into query params. toQueryParam :: (ToParam QueryParam a) => a -> Query -- | Serialize a type into form params. toFormParam :: (ToParam FormParam a) => a -> [(ByteString, ByteString)] -- | Serialize a type into file params. toFileParam :: (ToParam FileParam a) => a -> [(ByteString, FileInfo FilePath)] -- | Serialize a type into path params. toPathParam :: (ToParam PathParam a) => a -> [ByteString] -- | Serialize a type into cookie. toCookie :: (ToParam Cookie a) => a -> [(ByteString, CookieInfo ByteString)] -- | Serialize a type without nesting. toNonNestedParam :: (ToParam parK (NonNested a)) => Proxy (parK :: ParamK) -> ByteString -> a -> [SerializedData parK] -- | (Try to) Deserialize a type from a given type of kind ParamK. class FromParam (parK :: ParamK) a where fromParam pt pfx = (fmap to) . gfromParam pt pfx (ParamAcc 0 False) defaultParamSettings fromParam :: FromParam parK a => Proxy (parK :: ParamK) -> ByteString -> Trie (DeSerializedData parK) -> Validation [ParamErr] a -- | (Try to) Deserialize a type from ByteString. class DecodeParam (t :: *) where decodeParam = (fmap to) . gDecodeParam decodeParam :: DecodeParam t => ByteString -> Maybe t -- | (Try to) Deserialize a type from the header params class FromHeader a where fromHeader = (fmap to) . gfromHeader "" (ParamAcc 0 False) defaultParamSettings fromHeader :: FromHeader a => [Header] -> Validation [ParamErr] a -- | Datatype representing the parsed result of params. newtype Validation e a Validation :: Either e a -> Validation e a [getValidation] :: Validation e a -> Either e a -- | Errors that occured during deserialization. data ParamErr -- | The key was not found. NotFound :: ByteString -> ParamErr -- | A parse error occured while deserializing the type. ParseErr :: ByteString -> Text -> ParamErr -- | Convert the ParamErr that occured during deserialization into -- ApiErr type which can then be put in Response. class ParamErrToApiErr apiErr toApiErr :: ParamErrToApiErr apiErr => [ParamErr] -> apiErr -- | Define result of deserialization of a type of kind ParamK. -- | (Try to) Deserialize a type from query params. fromQueryParam :: (FromParam QueryParam a) => Query -> Validation [ParamErr] a -- | (Try to) Deserialize a type from form params. fromFormParam :: (FromParam FormParam a) => [(ByteString, ByteString)] -> Validation [ParamErr] a -- | (Try to) Deserialize a type from file params. fromFileParam :: (FromParam FileParam a) => [(ByteString, FileInfo FilePath)] -> Validation [ParamErr] a -- | (Try to) Deserialize a type from cookie. fromCookie :: (FromParam Cookie a) => [(ByteString, ByteString)] -> Validation [ParamErr] a -- | Lookup a value from the Trie using the given key. lookupParam :: Proxy (parK :: ParamK) -> ByteString -> Trie (DeSerializedData parK) -> Maybe (DeSerializedData parK) -- | (Try to) Deserialize a type without nesting. fromNonNestedParam :: (FromParam parK (NonNested a)) => Proxy (parK :: ParamK) -> ByteString -> Trie (DeSerializedData parK) -> Validation [ParamErr] a data CookieInfo a CookieInfo :: a -> Maybe ByteString -> Maybe UTCTime -> Maybe DiffTime -> Maybe ByteString -> Maybe Bool -> Maybe Bool -> CookieInfo a [cookieValue] :: CookieInfo a -> a [cookiePath] :: CookieInfo a -> Maybe ByteString [cookieExpires] :: CookieInfo a -> Maybe UTCTime [cookieMaxAge] :: CookieInfo a -> Maybe DiffTime [cookieDomain] :: CookieInfo a -> Maybe ByteString [cookieHttpOnly] :: CookieInfo a -> Maybe Bool [cookieSecure] :: CookieInfo a -> Maybe Bool -- | Serializing JsonOf will produce a JSON representation of the -- value contained within. This is useful if params has to be sent as -- JSON. newtype JsonOf a JsonOf :: a -> JsonOf a [getValue] :: JsonOf a -> a -- | Use this type if a key is required but the value is optional. newtype OptValue a OptValue :: Maybe a -> OptValue a [toMaybe] :: OptValue a -> Maybe a -- | A type for holding a file. newtype FileInfo FileInfo :: FileInfo FilePath -> FileInfo [fileInfo] :: FileInfo -> FileInfo FilePath -- | Use this type if for serialization / deserialization nesting is not -- required. The type contained within most likely requires -- EncodeParam / DecodeParam. newtype NonNested a NonNested :: a -> NonNested a [getNonNestedParam] :: NonNested a -> a -- | (Kind) Describes the various types of Param. data ParamK QueryParam :: ParamK FormParam :: ParamK FileParam :: ParamK PathParam :: ParamK Cookie :: ParamK data ParamSettings fieldModifier :: ParamSettings -> (ByteString -> ByteString) -- | Obtain the file path from FileInfo. filePath :: FileInfo -> FilePath -- | Nest the key with a prefix. -- --
--   nest "pfx" "key" == "pfx.key"
--   nest "" "key" == "key"
--   
nest :: ByteString -> ByteString -> ByteString defaultParamSettings :: ParamSettings genericToQueryParam :: (Generic a, GToParam (Rep a) QueryParam) => ParamSettings -> ByteString -> a -> [QueryItem] genericFromQueryParam :: (Generic a, GFromParam (Rep a) QueryParam) => ParamSettings -> ByteString -> Trie (Maybe ByteString) -> Validation [ParamErr] a genericToFormParam :: (Generic a, GToParam (Rep a) FormParam) => ParamSettings -> ByteString -> a -> [(ByteString, ByteString)] genericFromFormParam :: (Generic a, GFromParam (Rep a) FormParam) => ParamSettings -> ByteString -> Trie ByteString -> Validation [ParamErr] a genericToFileParam :: (Generic a, GToParam (Rep a) FileParam) => ParamSettings -> ByteString -> a -> [(ByteString, FileInfo FilePath)] genericFromFileParam :: (Generic a, GFromParam (Rep a) FileParam) => ParamSettings -> ByteString -> Trie (FileInfo FilePath) -> Validation [ParamErr] a genericToPathParam :: (Generic a, GToParam (Rep a) PathParam) => ParamSettings -> ByteString -> a -> [ByteString] genericFromPathParam :: (Generic a, GFromParam (Rep a) PathParam) => ParamSettings -> ByteString -> Trie ByteString -> Validation [ParamErr] a genericToCookie :: (Generic a, GToParam (Rep a) Cookie) => ParamSettings -> ByteString -> a -> [(ByteString, CookieInfo ByteString)] genericFromCookie :: (Generic a, GFromParam (Rep a) Cookie) => ParamSettings -> ByteString -> Trie ByteString -> Validation [ParamErr] a instance GHC.Classes.Eq WebApi.Param.ParamAcc instance GHC.Show.Show WebApi.Param.ParamAcc instance GHC.Classes.Eq WebApi.Param.ParamErr instance GHC.Show.Show WebApi.Param.ParamErr instance GHC.Read.Read a => GHC.Read.Read (WebApi.Param.NonNested a) instance GHC.Classes.Eq a => GHC.Classes.Eq (WebApi.Param.NonNested a) instance GHC.Show.Show a => GHC.Show.Show (WebApi.Param.NonNested a) instance (GHC.Show.Show e, GHC.Show.Show a) => GHC.Show.Show (WebApi.Param.Validation e a) instance GHC.Base.Functor (WebApi.Param.Validation e) instance (GHC.Classes.Eq e, GHC.Classes.Eq a) => GHC.Classes.Eq (WebApi.Param.Validation e a) instance GHC.Classes.Eq WebApi.Param.Unit instance GHC.Show.Show WebApi.Param.Unit instance GHC.Classes.Ord a => GHC.Classes.Ord (WebApi.Param.JsonOf a) instance GHC.Classes.Eq a => GHC.Classes.Eq (WebApi.Param.JsonOf a) instance GHC.Read.Read a => GHC.Read.Read (WebApi.Param.JsonOf a) instance GHC.Show.Show a => GHC.Show.Show (WebApi.Param.JsonOf a) instance GHC.Classes.Ord a => GHC.Classes.Ord (WebApi.Param.OptValue a) instance GHC.Classes.Eq a => GHC.Classes.Eq (WebApi.Param.OptValue a) instance GHC.Read.Read a => GHC.Read.Read (WebApi.Param.OptValue a) instance GHC.Show.Show a => GHC.Show.Show (WebApi.Param.OptValue a) instance GHC.Show.Show WebApi.Param.FileInfo instance GHC.Classes.Eq WebApi.Param.FileInfo instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (WebApi.Param.JsonOf a) instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (WebApi.Param.JsonOf a) instance GHC.Base.Monoid e => GHC.Base.Applicative (WebApi.Param.Validation e) instance WebApi.Param.EncodeParam Data.ByteString.Internal.ByteString instance WebApi.Param.DecodeParam Data.ByteString.Internal.ByteString instance WebApi.Param.EncodeParam GHC.Types.Int instance WebApi.Param.DecodeParam GHC.Types.Int instance WebApi.Param.EncodeParam GHC.Int.Int8 instance WebApi.Param.DecodeParam GHC.Int.Int8 instance WebApi.Param.EncodeParam GHC.Int.Int16 instance WebApi.Param.DecodeParam GHC.Int.Int16 instance WebApi.Param.EncodeParam GHC.Int.Int32 instance WebApi.Param.DecodeParam GHC.Int.Int32 instance WebApi.Param.EncodeParam GHC.Int.Int64 instance WebApi.Param.DecodeParam GHC.Int.Int64 instance WebApi.Param.EncodeParam GHC.Types.Word instance WebApi.Param.DecodeParam GHC.Types.Word instance WebApi.Param.EncodeParam GHC.Word.Word8 instance WebApi.Param.DecodeParam GHC.Word.Word8 instance WebApi.Param.EncodeParam GHC.Word.Word16 instance WebApi.Param.DecodeParam GHC.Word.Word16 instance WebApi.Param.EncodeParam GHC.Word.Word32 instance WebApi.Param.DecodeParam GHC.Word.Word32 instance WebApi.Param.EncodeParam GHC.Word.Word64 instance WebApi.Param.DecodeParam GHC.Word.Word64 instance WebApi.Param.EncodeParam GHC.Types.Float instance WebApi.Param.DecodeParam GHC.Types.Float instance WebApi.Param.EncodeParam GHC.Types.Double instance WebApi.Param.DecodeParam GHC.Types.Double instance WebApi.Param.EncodeParam GHC.Types.Char instance WebApi.Param.DecodeParam GHC.Types.Char instance WebApi.Param.EncodeParam Data.Text.Internal.Text instance WebApi.Param.DecodeParam Data.Text.Internal.Text instance WebApi.Param.EncodeParam Data.Time.Calendar.Days.Day instance WebApi.Param.DecodeParam Data.Time.Calendar.Days.Day instance WebApi.Param.EncodeParam Data.Time.Clock.UTC.UTCTime instance WebApi.Param.DecodeParam Data.Time.Clock.UTC.UTCTime instance WebApi.Param.EncodeParam Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.DecodeParam Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.EncodeParam Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.DecodeParam Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.EncodeParam WebApi.Param.Unit instance WebApi.Param.DecodeParam WebApi.Param.Unit instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b) => WebApi.Param.EncodeParam (a, b) instance (WebApi.Param.DecodeParam a, WebApi.Param.DecodeParam b) => WebApi.Param.DecodeParam (a, b) instance WebApi.Param.EncodeParam GHC.Types.Bool instance WebApi.Param.DecodeParam GHC.Types.Bool instance WebApi.Param.EncodeParam GHC.Integer.Type.Integer instance WebApi.Param.DecodeParam GHC.Integer.Type.Integer instance Data.Aeson.Types.Class.ToJSON a => WebApi.Param.EncodeParam (WebApi.Param.JsonOf a) instance Data.Aeson.Types.Class.FromJSON a => WebApi.Param.DecodeParam (WebApi.Param.JsonOf a) instance WebApi.Param.GHttpParam f => WebApi.Param.GHttpParam (GHC.Generics.D1 c f) instance (WebApi.Param.GHttpParam f, WebApi.Param.GHttpParam g) => WebApi.Param.GHttpParam (f GHC.Generics.:+: g) instance (WebApi.Param.GHttpParam f, GHC.Generics.Constructor c) => WebApi.Param.GHttpParam (GHC.Generics.C1 c f) instance WebApi.Param.GHttpParam GHC.Generics.U1 instance WebApi.Param.EncodeParam a => WebApi.Param.ToParam 'WebApi.Param.QueryParam (WebApi.Param.NonNested a) instance WebApi.Param.EncodeParam a => WebApi.Param.ToParam 'WebApi.Param.FormParam (WebApi.Param.NonNested a) instance WebApi.Param.EncodeParam a => WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Param.NonNested a) instance (WebApi.Param.DecodeParam a, Data.Typeable.Internal.Typeable a) => WebApi.Param.FromParam 'WebApi.Param.QueryParam (WebApi.Param.NonNested a) instance (WebApi.Param.DecodeParam a, Data.Typeable.Internal.Typeable a) => WebApi.Param.FromParam 'WebApi.Param.FormParam (WebApi.Param.NonNested a) instance (WebApi.Param.DecodeParam a, Data.Typeable.Internal.Typeable a) => WebApi.Param.FromParam 'WebApi.Param.Cookie (WebApi.Param.NonNested a) instance WebApi.Param.ToParam parK () instance WebApi.Param.ToHeader () instance WebApi.Param.ToParam 'WebApi.Param.QueryParam WebApi.Param.Unit instance WebApi.Param.ToParam 'WebApi.Param.FormParam WebApi.Param.Unit instance WebApi.Param.ToParam 'WebApi.Param.Cookie WebApi.Param.Unit instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Types.Int instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Types.Int instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Types.Int instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Int.Int8 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Int.Int8 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Int.Int8 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Int.Int16 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Int.Int16 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Int.Int16 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Int.Int32 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Int.Int32 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Int.Int32 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Int.Int64 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Int.Int64 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Int.Int64 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Types.Word instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Types.Word instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Types.Word instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Word.Word8 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Word.Word8 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Word.Word8 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Word.Word16 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Word.Word16 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Word.Word16 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Word.Word32 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Word.Word32 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Word.Word32 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Word.Word64 instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Word.Word64 instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Word.Word64 instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Integer.Type.Integer instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Integer.Type.Integer instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Integer.Type.Integer instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Types.Bool instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Types.Bool instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Types.Bool instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Types.Double instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Types.Double instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Types.Double instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Types.Float instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Types.Float instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Types.Float instance WebApi.Param.ToParam 'WebApi.Param.QueryParam GHC.Types.Char instance WebApi.Param.ToParam 'WebApi.Param.FormParam GHC.Types.Char instance WebApi.Param.ToParam 'WebApi.Param.Cookie GHC.Types.Char instance WebApi.Param.ToParam 'WebApi.Param.QueryParam Data.Text.Internal.Text instance WebApi.Param.ToParam 'WebApi.Param.FormParam Data.Text.Internal.Text instance WebApi.Param.ToParam 'WebApi.Param.Cookie Data.Text.Internal.Text instance WebApi.Param.ToParam 'WebApi.Param.QueryParam Data.ByteString.Internal.ByteString instance WebApi.Param.ToParam 'WebApi.Param.FormParam Data.ByteString.Internal.ByteString instance WebApi.Param.ToParam 'WebApi.Param.Cookie Data.ByteString.Internal.ByteString instance WebApi.Param.ToParam 'WebApi.Param.QueryParam Data.Time.Calendar.Days.Day instance WebApi.Param.ToParam 'WebApi.Param.FormParam Data.Time.Calendar.Days.Day instance WebApi.Param.ToParam 'WebApi.Param.Cookie Data.Time.Calendar.Days.Day instance WebApi.Param.ToParam 'WebApi.Param.QueryParam Data.Time.Clock.UTC.UTCTime instance WebApi.Param.ToParam 'WebApi.Param.FormParam Data.Time.Clock.UTC.UTCTime instance WebApi.Param.ToParam 'WebApi.Param.Cookie Data.Time.Clock.UTC.UTCTime instance WebApi.Param.ToParam 'WebApi.Param.QueryParam Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.ToParam 'WebApi.Param.FormParam Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.ToParam 'WebApi.Param.Cookie Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.ToParam 'WebApi.Param.QueryParam Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.ToParam 'WebApi.Param.FormParam Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.ToParam 'WebApi.Param.Cookie Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.ToParam 'WebApi.Param.Cookie a => WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Param.CookieInfo a) instance WebApi.Param.EncodeParam a => WebApi.Param.ToParam 'WebApi.Param.QueryParam (WebApi.Param.OptValue a) instance WebApi.Param.EncodeParam a => WebApi.Param.ToParam 'WebApi.Param.FormParam (WebApi.Param.OptValue a) instance WebApi.Param.EncodeParam a => WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Param.OptValue a) instance Data.Aeson.Types.Class.ToJSON a => WebApi.Param.ToParam 'WebApi.Param.QueryParam (WebApi.Param.JsonOf a) instance Data.Aeson.Types.Class.ToJSON a => WebApi.Param.ToParam 'WebApi.Param.FormParam (WebApi.Param.JsonOf a) instance Data.Aeson.Types.Class.ToJSON a => WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Param.JsonOf a) instance WebApi.Param.ToParam par a => WebApi.Param.ToParam par (GHC.Base.Maybe a) instance (WebApi.Param.ToParam par a, WebApi.Param.ToParam par b) => WebApi.Param.ToParam par (Data.Either.Either a b) instance WebApi.Param.ToParam par a => WebApi.Param.ToParam par [a] instance WebApi.Param.ToParam par a => WebApi.Param.ToParam par (Data.Vector.Vector a) instance WebApi.Param.FromParam parK () instance WebApi.Param.FromHeader () instance WebApi.Param.FromParam 'WebApi.Param.QueryParam WebApi.Param.Unit instance WebApi.Param.FromParam 'WebApi.Param.FormParam WebApi.Param.Unit instance WebApi.Param.FromParam 'WebApi.Param.Cookie WebApi.Param.Unit instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Types.Bool instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Types.Bool instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Types.Bool instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Types.Char instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Types.Char instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Types.Char instance WebApi.Param.FromParam 'WebApi.Param.QueryParam Data.Time.Clock.UTC.UTCTime instance WebApi.Param.FromParam 'WebApi.Param.FormParam Data.Time.Clock.UTC.UTCTime instance WebApi.Param.FromParam 'WebApi.Param.Cookie Data.Time.Clock.UTC.UTCTime instance WebApi.Param.FromParam 'WebApi.Param.QueryParam Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.FromParam 'WebApi.Param.FormParam Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.FromParam 'WebApi.Param.Cookie Data.Time.LocalTime.LocalTime.LocalTime instance WebApi.Param.FromParam 'WebApi.Param.QueryParam Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.FromParam 'WebApi.Param.FormParam Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.FromParam 'WebApi.Param.Cookie Data.Time.LocalTime.TimeOfDay.TimeOfDay instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Types.Int instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Types.Int instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Types.Int instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Int.Int8 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Int.Int8 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Int.Int8 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Int.Int16 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Int.Int16 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Int.Int16 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Int.Int32 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Int.Int32 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Int.Int32 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Int.Int64 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Int.Int64 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Int.Int64 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Integer.Type.Integer instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Integer.Type.Integer instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Integer.Type.Integer instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Types.Word instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Types.Word instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Types.Word instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Word.Word8 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Word.Word8 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Word.Word8 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Word.Word16 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Word.Word16 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Word.Word16 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Word.Word32 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Word.Word32 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Word.Word32 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Word.Word64 instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Word.Word64 instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Word.Word64 instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Types.Double instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Types.Double instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Types.Double instance WebApi.Param.FromParam 'WebApi.Param.QueryParam GHC.Types.Float instance WebApi.Param.FromParam 'WebApi.Param.FormParam GHC.Types.Float instance WebApi.Param.FromParam 'WebApi.Param.Cookie GHC.Types.Float instance WebApi.Param.FromParam 'WebApi.Param.QueryParam Data.ByteString.Internal.ByteString instance WebApi.Param.FromParam 'WebApi.Param.FormParam Data.ByteString.Internal.ByteString instance WebApi.Param.FromParam 'WebApi.Param.Cookie Data.ByteString.Internal.ByteString instance WebApi.Param.FromParam par a => WebApi.Param.FromParam par (GHC.Base.Maybe a) instance (WebApi.Param.FromParam par a, WebApi.Param.FromParam par b) => WebApi.Param.FromParam par (Data.Either.Either a b) instance WebApi.Param.FromParam 'WebApi.Param.QueryParam Data.Text.Internal.Text instance WebApi.Param.FromParam 'WebApi.Param.FormParam Data.Text.Internal.Text instance WebApi.Param.FromParam 'WebApi.Param.Cookie Data.Text.Internal.Text instance WebApi.Param.FromParam 'WebApi.Param.QueryParam Data.Time.Calendar.Days.Day instance WebApi.Param.FromParam 'WebApi.Param.FormParam Data.Time.Calendar.Days.Day instance WebApi.Param.FromParam 'WebApi.Param.Cookie Data.Time.Calendar.Days.Day instance WebApi.Param.FromParam par a => WebApi.Param.FromParam par [a] instance WebApi.Param.FromParam par a => WebApi.Param.FromParam par (Data.Vector.Vector a) instance WebApi.Param.DecodeParam a => WebApi.Param.FromParam 'WebApi.Param.QueryParam (WebApi.Param.OptValue a) instance WebApi.Param.DecodeParam a => WebApi.Param.FromParam 'WebApi.Param.FormParam (WebApi.Param.OptValue a) instance WebApi.Param.DecodeParam a => WebApi.Param.FromParam 'WebApi.Param.Cookie (WebApi.Param.OptValue a) instance WebApi.Param.FromParam 'WebApi.Param.Cookie a => WebApi.Param.FromParam 'WebApi.Param.Cookie (WebApi.Param.CookieInfo a) instance WebApi.Param.ToParam 'WebApi.Param.FileParam WebApi.Param.FileInfo instance WebApi.Param.FromParam 'WebApi.Param.FileParam WebApi.Param.FileInfo instance WebApi.Param.ToParam 'WebApi.Param.PathParam Data.ByteString.Internal.ByteString instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Types.Int instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Int.Int8 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Int.Int16 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Int.Int32 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Int.Int64 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Types.Word instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Word.Word8 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Word.Word16 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Word.Word32 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Word.Word64 instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Types.Float instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Types.Double instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Types.Char instance WebApi.Param.ToParam 'WebApi.Param.PathParam Data.Text.Internal.Text instance WebApi.Param.ToParam 'WebApi.Param.PathParam Data.Time.Calendar.Days.Day instance WebApi.Param.ToParam 'WebApi.Param.PathParam Data.Time.Clock.UTC.UTCTime instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Types.Bool instance WebApi.Param.ToParam 'WebApi.Param.PathParam GHC.Integer.Type.Integer instance Data.Aeson.Types.Class.ToJSON a => WebApi.Param.ToParam 'WebApi.Param.PathParam (WebApi.Param.JsonOf a) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b, WebApi.Param.EncodeParam c) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b, c) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b, WebApi.Param.EncodeParam c, WebApi.Param.EncodeParam d) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b, c, d) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b, WebApi.Param.EncodeParam c, WebApi.Param.EncodeParam d, WebApi.Param.EncodeParam e) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b, c, d, e) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b, WebApi.Param.EncodeParam c, WebApi.Param.EncodeParam d, WebApi.Param.EncodeParam e, WebApi.Param.EncodeParam f) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b, c, d, e, f) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b, WebApi.Param.EncodeParam c, WebApi.Param.EncodeParam d, WebApi.Param.EncodeParam e, WebApi.Param.EncodeParam f, WebApi.Param.EncodeParam g, WebApi.Param.EncodeParam h) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b, c, d, e, f, g, h) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b, WebApi.Param.EncodeParam c, WebApi.Param.EncodeParam d, WebApi.Param.EncodeParam e, WebApi.Param.EncodeParam f, WebApi.Param.EncodeParam g, WebApi.Param.EncodeParam h, WebApi.Param.EncodeParam i) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b, c, d, e, f, g, h, i) instance (WebApi.Param.EncodeParam a, WebApi.Param.EncodeParam b, WebApi.Param.EncodeParam c, WebApi.Param.EncodeParam d, WebApi.Param.EncodeParam e, WebApi.Param.EncodeParam f, WebApi.Param.EncodeParam g, WebApi.Param.EncodeParam h, WebApi.Param.EncodeParam i, WebApi.Param.EncodeParam j) => WebApi.Param.ToParam 'WebApi.Param.PathParam (a, b, c, d, e, f, g, h, i, j) instance Data.Aeson.Types.Class.ToJSON WebApi.Param.ParamErr instance Data.Aeson.Types.Class.FromJSON WebApi.Param.ParamErr instance WebApi.Param.ParamErrToApiErr () instance WebApi.Param.ParamErrToApiErr Data.Text.Internal.Text instance WebApi.Param.ParamErrToApiErr Data.Aeson.Types.Internal.Value instance (WebApi.Param.GToHeader f, WebApi.Param.GToHeader g) => WebApi.Param.GToHeader (f GHC.Generics.:+: g) instance (WebApi.Param.GToHeader f, WebApi.Param.GToHeader g) => WebApi.Param.GToHeader (f GHC.Generics.:*: g) instance WebApi.Param.EncodeParam c => WebApi.Param.GToHeader (GHC.Generics.K1 i c) instance (WebApi.Param.GToHeader f, GHC.Generics.Constructor t) => WebApi.Param.GToHeader (GHC.Generics.M1 GHC.Generics.C t f) instance WebApi.Param.GToHeader f => WebApi.Param.GToHeader (GHC.Generics.M1 GHC.Generics.D t f) instance (WebApi.Param.GToHeader f, GHC.Generics.Selector t) => WebApi.Param.GToHeader (GHC.Generics.M1 GHC.Generics.S t f) instance WebApi.Param.GToHeader GHC.Generics.U1 instance (WebApi.Param.GFromHeader f, WebApi.Param.GFromHeader g) => WebApi.Param.GFromHeader (f GHC.Generics.:*: g) instance (WebApi.Param.GFromHeader f, WebApi.Param.GFromHeader g) => WebApi.Param.GFromHeader (f GHC.Generics.:+: g) instance (WebApi.Param.GFromHeader f, GHC.Generics.Constructor t) => WebApi.Param.GFromHeader (GHC.Generics.M1 GHC.Generics.C t f) instance (WebApi.Param.GFromHeader f, GHC.Generics.Datatype t) => WebApi.Param.GFromHeader (GHC.Generics.M1 GHC.Generics.D t f) instance (WebApi.Param.GFromHeader f, GHC.Generics.Selector t) => WebApi.Param.GFromHeader (GHC.Generics.M1 GHC.Generics.S t f) instance WebApi.Param.DecodeParam c => WebApi.Param.GFromHeader (GHC.Generics.K1 i c) instance WebApi.Param.GFromHeader GHC.Generics.U1 instance (WebApi.Param.GFromParam f parK, WebApi.Param.GFromParam g parK) => WebApi.Param.GFromParam (f GHC.Generics.:*: g) parK instance (WebApi.Param.GFromParam f parK, WebApi.Param.GFromParam g parK) => WebApi.Param.GFromParam (f GHC.Generics.:+: g) parK instance (WebApi.Param.GFromParam f parK, GHC.Generics.Constructor t) => WebApi.Param.GFromParam (GHC.Generics.M1 GHC.Generics.C t f) parK instance (WebApi.Param.GFromParam f parK, GHC.Generics.Datatype t) => WebApi.Param.GFromParam (GHC.Generics.M1 GHC.Generics.D t f) parK instance (WebApi.Param.GFromParam f parK, GHC.Generics.Selector t, f ~ GHC.Generics.K1 i c) => WebApi.Param.GFromParam (GHC.Generics.M1 GHC.Generics.S t f) parK instance WebApi.Param.FromParam parK c => WebApi.Param.GFromParam (GHC.Generics.K1 i c) parK instance WebApi.Param.FromParam parK WebApi.Param.Unit => WebApi.Param.GFromParam GHC.Generics.U1 parK instance (WebApi.Param.GToParam f parK, WebApi.Param.GToParam g parK) => WebApi.Param.GToParam (f GHC.Generics.:*: g) parK instance (WebApi.Param.GToParam f parK, WebApi.Param.GToParam g parK) => WebApi.Param.GToParam (f GHC.Generics.:+: g) parK instance WebApi.Param.ToParam parK c => WebApi.Param.GToParam (GHC.Generics.K1 i c) parK instance (WebApi.Param.GToParam f parK, GHC.Generics.Constructor t) => WebApi.Param.GToParam (GHC.Generics.M1 GHC.Generics.C t f) parK instance WebApi.Param.GToParam f parK => WebApi.Param.GToParam (GHC.Generics.M1 GHC.Generics.D t f) parK instance (WebApi.Param.GToParam f parK, GHC.Generics.Selector t, f ~ GHC.Generics.K1 i c) => WebApi.Param.GToParam (GHC.Generics.M1 GHC.Generics.S t f) parK instance WebApi.Param.ToParam parK WebApi.Param.Unit => WebApi.Param.GToParam GHC.Generics.U1 parK module WebApi.Versioning -- | A Style of versioning which has a Major version and a Minor version. data MajorMinor (ver :: (Nat, Nat)) MajorMinor :: MajorMinor -- | A Style of versioning which has only has a Major version. data Major (maj :: Nat) Major :: Major -- | Comparison between versions. class OrdVersion (ver :: *) where cmpVersion _ _ = (Proxy :: Proxy ord) cmpVersion :: (OrdVersion ver, ver ~ ((proxy :: k -> *) (v1 :: k)), ord ~ (VersionOrd (proxy v1) (proxy v2)), SingOrd ord) => proxy v1 -> proxy (v2 :: k) -> Proxy ord -- | Defines ordering of versions. -- | Comparison between two versions. Returns an Ord. -- --
--   >>> compareVersion (MajorMinor :: MajorMinor (0, 0)) (MajorMinor :: MajorMinor (0, 1)) == LT
--   True            
--   
compareVersion :: (OrdVersion (proxy v1), SingOrd (VersionOrd (proxy v1) (proxy v2))) => proxy (v1 :: k) -> proxy (v2 :: k) -> Ordering instance WebApi.Versioning.SingOrd 'GHC.Types.EQ instance WebApi.Versioning.SingOrd 'GHC.Types.LT instance WebApi.Versioning.SingOrd 'GHC.Types.GT instance WebApi.Versioning.OrdVersion (WebApi.Versioning.Major maj) instance WebApi.Versioning.OrdVersion (WebApi.Versioning.MajorMinor '(maj, min)) module WebApi.ContentTypes -- | Type representing content type of application/json. data JSON -- | Type representing content type of text/plain. data PlainText -- | Type representing content type of text/html. data HTML -- | Type representing content type of application/octetstream. data OctetStream -- | Type representing content type of multipart/form-data. data MultipartFormData -- | Type representing content type of -- application/x-www-form-urlencoded. data UrlEncoded data Content (ctypes :: [*]) (a :: *) -- | Singleton class for content type. class Accept ctype contentType :: Accept ctype => Proxy ctype -> MediaType -- | Encode a type into a specific content type. class (Accept a) => Encode a c encode :: Encode a c => Proxy a -> c -> Builder -- | (Try to) Decode a type from a specific content type. class (Accept c) => Decode c a decode :: Decode c a => Proxy c -> ByteString -> Either String a class FromText a fromText :: FromText a => Text -> Maybe a class ToText a toText :: ToText a => a -> Text -- | Encodings of type for all content types ctypes. class Encodings (ctypes :: [*]) a encodings :: Encodings ctypes a => Proxy ctypes -> a -> [(MediaType, Builder)] -- | Decodings of type for all content types ctypes. class Decodings (ctypes :: [*]) a decodings :: Decodings ctypes a => Proxy ctypes -> ByteString -> [(MediaType, Either String a)] class PartEncodings (xs :: [*]) partEncodings :: PartEncodings xs => Proxy xs -> HListToRecTuple (StripContents xs) -> [[(MediaType, Builder)]] class PartDecodings (xs :: [*]) partDecodings :: PartDecodings xs => Proxy xs -> [(ByteString, ByteString)] -> Either String (HListToRecTuple (StripContents xs)) instance (WebApi.ContentTypes.Accept ctype, WebApi.ContentTypes.Encode ctype a, WebApi.ContentTypes.Encodings ctypes a) => WebApi.ContentTypes.Encodings (ctype : ctypes) a instance WebApi.ContentTypes.Encodings '[] a instance (WebApi.ContentTypes.Accept ctype, WebApi.ContentTypes.Decode ctype a, WebApi.ContentTypes.Decodings ctypes a) => WebApi.ContentTypes.Decodings (ctype : ctypes) a instance WebApi.ContentTypes.Decodings '[] a instance WebApi.ContentTypes.Accept WebApi.ContentTypes.JSON instance WebApi.ContentTypes.Accept WebApi.ContentTypes.PlainText instance WebApi.ContentTypes.Accept WebApi.ContentTypes.HTML instance WebApi.ContentTypes.Accept WebApi.ContentTypes.OctetStream instance WebApi.ContentTypes.Accept WebApi.ContentTypes.MultipartFormData instance WebApi.ContentTypes.Accept WebApi.ContentTypes.UrlEncoded instance Data.Aeson.Types.Class.ToJSON c => WebApi.ContentTypes.Encode WebApi.ContentTypes.JSON c instance WebApi.ContentTypes.ToText a => WebApi.ContentTypes.Encode WebApi.ContentTypes.PlainText a instance Data.Aeson.Types.Class.FromJSON a => WebApi.ContentTypes.Decode WebApi.ContentTypes.JSON a instance WebApi.ContentTypes.FromText a => WebApi.ContentTypes.Decode WebApi.ContentTypes.PlainText a instance WebApi.ContentTypes.ToText Data.Text.Internal.Text instance WebApi.ContentTypes.FromText Data.Text.Internal.Text instance (WebApi.ContentTypes.PartEncodings ts, WebApi.ContentTypes.Encodings ctypes (WebApi.ContentTypes.StripContent t), WebApi.ContentTypes.MkContent t ~ WebApi.ContentTypes.Content ctypes a) => WebApi.ContentTypes.PartEncodings (t : ts) instance WebApi.ContentTypes.PartEncodings '[] instance (WebApi.ContentTypes.PartDecodings ts, WebApi.ContentTypes.Decodings ctypes (WebApi.ContentTypes.StripContent t), WebApi.ContentTypes.MkContent t ~ WebApi.ContentTypes.Content ctypes a) => WebApi.ContentTypes.PartDecodings (t : ts) instance WebApi.ContentTypes.PartDecodings '[] -- | Provides the contract for the web api. The contract consists of -- WebApi and ApiContract classes. WebApi contains -- information related to the entire group of endpoints whereas -- ApiContract is concerned with information related to each end -- point. Once the contract is written, it can be then used to -- -- -- -- ... and possibly more. module WebApi.Contract -- | Describes a collection of web apis. class (OrdVersion (Version p)) => WebApi (p :: *) where type family Version p :: * type family Apis p :: [*] Version p = Major 0 -- | Describes a contract for a single API end point. class (SingMethod m, WebApi p, ReqInvariant (FormParam m r) (FileParam m r) (RequestBody m r)) => ApiContract (p :: *) (m :: *) (r :: *) where type family PathParam m r type family QueryParam m r type family FormParam m r type family FileParam m r type family HeaderIn m r type family CookieIn m r type family ApiOut m r type family ApiErr m r type family HeaderOut m r type family CookieOut m r type family ContentTypes m r :: [*] type family RequestBody m r :: [*] PathParam m r = PathParam' m r QueryParam m r = () FormParam m r = () FileParam m r = () HeaderIn m r = () CookieIn m r = () CookieOut m r = () HeaderOut m r = () ApiErr m r = () RequestBody m r = '[] ContentTypes m r = '[JSON] -- | Type of the path params that a route r has. If a custom -- routing system is being used, then you will have to give an instance -- for PathParam' for types being used in routing. Please take a -- look at the existing instances of PathParam' for reference. -- | Datatype representing a request to route r with method -- m. data Request m r -- | Query params of the request. queryParam :: Request m r -> QueryParam m r -- | Form params of the request. formParam :: Request m r -> FormParam m r -- | File params of the request. fileParam :: Request m r -> FileParam m r -- | Header params of the request. headerIn :: Request m r -> HeaderIn m r -- | Cookie params of the request. cookieIn :: Request m r -> CookieIn m r method :: Request m r -> Text -- | Body of the request requestBody :: Request m r -> HListToTuple (StripContents (RequestBody m r)) -- | Path params of the request. pathParam :: Request m r -> PathParam m r -- | Exists only for compatability reasons. This will be removed in the -- next version. Use Request pattern instead -- | Used for constructing Request -- | Datatype representing a response from route r with method -- m. data Response m r Success :: Status -> (ApiOut m r) -> (HeaderOut m r) -> (CookieOut m r) -> Response m r Failure :: (Either (ApiError m r) OtherError) -> Response m r -- | Datatype representing a known failure from route r with -- method m. data ApiError m r ApiError :: Status -> (ApiErr m r) -> Maybe (HeaderOut m r) -> Maybe (CookieOut m r) -> ApiError m r [code] :: ApiError m r -> Status [err] :: ApiError m r -> (ApiErr m r) [headerOut] :: ApiError m r -> Maybe (HeaderOut m r) [cookieOut] :: ApiError m r -> Maybe (CookieOut m r) -- | Datatype representing an unknown failure. data OtherError OtherError :: SomeException -> OtherError [exception] :: OtherError -> SomeException -- | Datatype representing a Api Resource. This is a Phantom type similar -- to Proxy, usually used to fix the parameter method (m) and -- route (r) of functions without resorting to pass undefined as -- witness data Resource m r Res :: Resource m r module WebApi.Internal data RouteResult a NotMatched :: RouteResult a Matched :: a -> RouteResult a type RoutingApplication = Request -> (RouteResult Response -> IO ResponseReceived) -> IO ResponseReceived toApplication :: RoutingApplication -> Application fromWaiRequest :: (FromParam QueryParam (QueryParam m r), FromParam FormParam (FormParam m r), FromParam FileParam (FileParam m r), FromHeader (HeaderIn m r), FromParam Cookie (CookieIn m r), ToHListRecTuple (StripContents (RequestBody m r)), PartDecodings (RequestBody m r), SingMethod m) => Request -> PathParam m r -> (Request m r -> IO (Response m r)) -> IO (Validation [ParamErr] (Response m r)) toWaiResponse :: (ToHeader (HeaderOut m r), ToParam Cookie (CookieOut m r), Encodings (ContentTypes m r) (ApiOut m r), Encodings (ContentTypes m r) (ApiErr m r)) => Request -> Response m r -> Response -- | Generate a type safe URL for a given route type. The URI can be used -- for setting a base URL if required. link :: (ToParam QueryParam (QueryParam m r), MkPathFormatString r, ToParam PathParam (PathParam m r)) => route m r -> URI -> PathParam m r -> Maybe (QueryParam m r) -> URI renderUriPath :: (ToParam PathParam path, MkPathFormatString r) => ByteString -> path -> route m r -> ByteString renderPaths :: (ToParam PathParam path, MkPathFormatString r) => path -> route m r -> ByteString -- | Describes the implementation of a single API end point corresponding -- to ApiContract (ApiInterface p) m r class (ApiContract (ApiInterface p) m r) => ApiHandler (p :: *) (m :: *) (r :: *) -- | Handler for the API end point which returns a Response. -- -- TODO : query type parameter is an experimental one used for -- trying out dependently typed params. This parameter will let us refine -- the ApiOut to the structure that is requested by the client. -- for eg : graph.facebook.com/bgolub?fields=id,name,picture -- -- This feature is not finalized and might get changed / removed. -- Currently the return type of handler is equivalent to `Response m r` handler :: (ApiHandler p m r, query ~ '[]) => Tagged query p -> Request m r -> HandlerM p (Query (Response m r) query) -- | Binds implementation to interface and provides a pluggable handler -- monad for the endpoint handler implementation. class (MonadCatch (HandlerM p), MonadIO (HandlerM p), WebApi (ApiInterface p)) => WebApiServer (p :: *) where type family HandlerM p :: * -> * type family ApiInterface p :: * HandlerM p = IO toIO _ = id -- | Create a value of IO a from HandlerM p a. toIO :: WebApiServer p => p -> HandlerM p a -> IO a -- | Type of settings of the server. data ServerSettings ServerSettings :: ServerSettings -- | Default server settings. serverSettings :: ServerSettings -- | Type of segments of a Path. data PathSegment -- | A static segment StaticSegment :: Text -> PathSegment -- | A dynamic segment Hole :: PathSegment -- | Describe representation of the route. class MkPathFormatString r -- | Given a route, this function should produce the [PathSegment] -- of that route. This gives the flexibility to hook in a different -- routing system into the application. mkPathFormatString :: MkPathFormatString r => Proxy r -> [PathSegment] -- | Type of Exception raised in a handler. data ApiException m r ApiException :: ApiError m r -> ApiException m r [apiException] :: ApiException m r -> ApiError m r handleApiException :: (query ~ '[], Monad (HandlerM p)) => p -> ApiException m r -> (HandlerM p) (Query (Response m r) query) handleSomeException :: (query ~ '[], Monad (HandlerM p)) => p -> SomeException -> (HandlerM p) (Query (Response m r) query) getCookie :: Request -> Maybe ByteString getAccept :: Request -> Maybe ByteString hSetCookie :: HeaderName getContentType :: ResponseHeaders -> Maybe ByteString newtype Tagged (s :: [*]) b Tagged :: b -> Tagged b [unTagged] :: Tagged b -> b toTagged :: Proxy s -> b -> Tagged s b instance GHC.Classes.Eq WebApi.Internal.PathSegment instance GHC.Show.Show WebApi.Internal.PathSegment instance GHC.Show.Show (WebApi.Internal.ApiException m r) instance (Data.Typeable.Internal.Typeable m, Data.Typeable.Internal.Typeable r) => GHC.Exception.Exception (WebApi.Internal.ApiException m r) -- | Provides a client for a web api for a given contract. module WebApi.Client -- | Given a Request type, create the request and obtain a response. -- Gives back a Response. client :: (CookieOut m r ~ (), ToParam PathParam (PathParam m r), ToParam QueryParam (QueryParam m r), ToParam FormParam (FormParam m r), ToHeader (HeaderIn m r), ToParam FileParam (FileParam m r), FromHeader (HeaderOut m r), Decodings (ContentTypes m r) (ApiOut m r), Decodings (ContentTypes m r) (ApiErr m r), SingMethod m, MkPathFormatString r, PartEncodings (RequestBody m r), ToHListRecTuple (StripContents (RequestBody m r))) => ClientSettings -> Request m r -> IO (Response m r) -- | Creates the Response type from the response body. fromClientResponse :: (FromHeader (HeaderOut m r), Decodings (ContentTypes m r) (ApiOut m r), Decodings (ContentTypes m r) (ApiErr m r), CookieOut m r ~ ()) => Response BodyReader -> IO (Response m r) -- | Creates a request from the Request type. toClientRequest :: (ToParam PathParam (PathParam m r), ToParam QueryParam (QueryParam m r), ToParam FormParam (FormParam m r), ToHeader (HeaderIn m r), ToParam FileParam (FileParam m r), SingMethod m, MkPathFormatString r, PartEncodings (RequestBody m r), ToHListRecTuple (StripContents (RequestBody m r))) => Request -> Request m r -> IO Request -- | Generate a type safe URL for a given route type. The URI can be used -- for setting a base URL if required. link :: (ToParam QueryParam (QueryParam m r), MkPathFormatString r, ToParam PathParam (PathParam m r)) => route m r -> URI -> PathParam m r -> Maybe (QueryParam m r) -> URI -- | Datatype representing the settings related to client. data ClientSettings ClientSettings :: String -> Manager -> ClientSettings -- | base url of the API being called. [baseUrl] :: ClientSettings -> String -- | connection manager for the connection. [connectionManager] :: ClientSettings -> Manager -- | This exception is used to signal an irrecoverable error while -- deserializing the response. data UnknownClientException data Manager :: * newManager :: ManagerSettings -> IO Manager closeManager :: Manager -> IO () withManager :: ManagerSettings -> (Manager -> IO a) -> IO a class HasHttpManager a getHttpManager :: HasHttpManager a => a -> Manager data ManagerSettings :: * defaultManagerSettings :: ManagerSettings tlsManagerSettings :: ManagerSettings instance GHC.Show.Show WebApi.Client.UnknownClientException instance GHC.Exception.Exception WebApi.Client.UnknownClientException module WebApi.Router -- | Datatype representing a static path piece. data Static (s :: Symbol) type Root = Static "" -- | Datatype representing a route. data (:/) (p1 :: k) (p2 :: k1) -- | Datatype representing a endpoint. data Route (ms :: [*]) (r :: *) -- | Class to do the default routing. class Router (server :: *) (r :: k) (pr :: (*, [*])) route :: (Router server r pr, iface ~ (ApiInterface server)) => Proxy r -> server -> ParsedRoute pr -> RoutingApplication router :: (iface ~ (ApiInterface server), Router server apis '(CUSTOM "", '[])) => Proxy apis -> server -> RoutingApplication -- | Convert the path into a flat hierarchy. -- | Type of segments of a Path. data PathSegment -- | A static segment StaticSegment :: Text -> PathSegment -- | A dynamic segment Hole :: PathSegment -- | Describe representation of the route. class MkPathFormatString r -- | Given a route, this function should produce the [PathSegment] -- of that route. This gives the flexibility to hook in a different -- routing system into the application. mkPathFormatString :: MkPathFormatString r => Proxy r -> [PathSegment] -- | This function is used to call local handler without incurring the cost -- of network round trip and se/deserialisation of Request and Response. apiHandler :: (query ~ '[], MonadCatch (HandlerM p), ApiHandler p m r, Typeable m, Typeable r) => Tagged query p -> Request m r -> HandlerM p (Query (Response m r) query) data StaticPiece (s :: Symbol) data DynamicPiece (t :: *) data ParsedRoute :: (*, [*]) -> * Nil :: Proxy method -> ParsedRoute '(method, '[]) ConsStaticPiece :: Proxy (p :: Symbol) -> ParsedRoute '(method, ps) -> ParsedRoute '(method, (StaticPiece p) : ps) ConsDynamicPiece :: !t -> ParsedRoute '(method, ps) -> ParsedRoute '(method, (DynamicPiece t) : ps) data PieceType :: * -> * SPiece :: Proxy (p :: Symbol) -> PieceType (StaticPiece p) DPiece :: !val -> PieceType (DynamicPiece val) fromParsedRoute :: (PathParam m (FromPieces pths) ~ HListToTuple (FilterDynP pths)) => ParsedRoute '(m, pths) -> PathParam m (FromPieces pths) snocParsedRoute :: ParsedRoute '(method, ps) -> PieceType pt -> ParsedRoute '(method, ps :++ '[pt]) symTxt :: KnownSymbol sym => proxy sym -> Text instance (WebApi.Method.SingMethod m, WebApi.Router.Router s r '(m, '[]), WebApi.Router.Router s (WebApi.Router.Route ms r) pr) => WebApi.Router.Router s (WebApi.Router.Route (m : ms) r) pr instance WebApi.Router.Router s (WebApi.Router.Route '[] r) pr instance (WebApi.Router.Router s route pr, WebApi.Router.Router s routes pr) => WebApi.Router.Router s (route : routes) pr instance WebApi.Router.Router s '[] pr instance (WebApi.Router.Router s (WebApi.Router.MarkDyn rest) '(m, pp WebApi.Util.:++ '[WebApi.Router.DynamicPiece piece]), WebApi.Param.DecodeParam piece) => WebApi.Router.Router s (piece WebApi.Router.:/ rest) '(m, pp) instance (WebApi.Router.Router s (WebApi.Router.MarkDyn rest) '(m, pp WebApi.Util.:++ '[WebApi.Router.StaticPiece piece]), GHC.TypeLits.KnownSymbol piece) => WebApi.Router.Router s (piece WebApi.Router.:/ rest) '(m, pp) instance (GHC.TypeLits.KnownSymbol piece, WebApi.Internal.ApiHandler s m (WebApi.Router.Static piece), WebApi.Param.ToHeader (WebApi.Contract.HeaderOut m (WebApi.Router.Static piece)), WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Contract.CookieOut m (WebApi.Router.Static piece)), WebApi.Param.FromParam 'WebApi.Param.QueryParam (WebApi.Contract.QueryParam m (WebApi.Router.Static piece)), WebApi.Param.FromParam 'WebApi.Param.FormParam (WebApi.Contract.FormParam m (WebApi.Router.Static piece)), WebApi.Param.FromParam 'WebApi.Param.FileParam (WebApi.Contract.FileParam m (WebApi.Router.Static piece)), WebApi.Param.FromHeader (WebApi.Contract.HeaderIn m (WebApi.Router.Static piece)), WebApi.Param.FromParam 'WebApi.Param.Cookie (WebApi.Contract.CookieIn m (WebApi.Router.Static piece)), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m (WebApi.Router.Static piece)) (WebApi.Contract.ApiOut m (WebApi.Router.Static piece)), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m (WebApi.Router.Static piece)) (WebApi.Contract.ApiErr m (WebApi.Router.Static piece)), WebApi.Contract.PathParam m (WebApi.Router.Static piece) ~ (), WebApi.Param.ParamErrToApiErr (WebApi.Contract.ApiErr m (WebApi.Router.Static piece)), WebApi.Util.ToHListRecTuple (WebApi.ContentTypes.StripContents (WebApi.Contract.RequestBody m (WebApi.Router.Static piece))), WebApi.ContentTypes.PartDecodings (WebApi.Contract.RequestBody m (WebApi.Router.Static piece)), Data.Typeable.Internal.Typeable m, Data.Typeable.Internal.Typeable (WebApi.Router.Static piece), WebApi.Internal.WebApiServer s) => WebApi.Router.Router s (WebApi.Router.Static piece) '(m, pp) instance (GHC.TypeLits.KnownSymbol lpiece, GHC.TypeLits.KnownSymbol rpiece, paths ~ (pp WebApi.Util.:++ '[WebApi.Router.StaticPiece lpiece, WebApi.Router.StaticPiece rpiece]), paths ~ ((pp WebApi.Util.:++ '[WebApi.Router.StaticPiece lpiece]) WebApi.Util.:++ '[WebApi.Router.StaticPiece rpiece]), route ~ WebApi.Router.FromPieces paths, WebApi.Internal.ApiHandler s m route, WebApi.Contract.PathParam m route ~ WebApi.Util.HListToTuple (WebApi.Router.FilterDynP paths), WebApi.Param.FromParam 'WebApi.Param.QueryParam (WebApi.Contract.QueryParam m route), WebApi.Param.FromParam 'WebApi.Param.FormParam (WebApi.Contract.FormParam m route), WebApi.Param.FromParam 'WebApi.Param.FileParam (WebApi.Contract.FileParam m route), WebApi.Param.FromParam 'WebApi.Param.Cookie (WebApi.Contract.CookieIn m route), WebApi.Param.FromHeader (WebApi.Contract.HeaderIn m route), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m route) (WebApi.Contract.ApiErr m route), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m route) (WebApi.Contract.ApiOut m route), WebApi.Param.ToHeader (WebApi.Contract.HeaderOut m route), WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Contract.CookieOut m route), WebApi.Param.ParamErrToApiErr (WebApi.Contract.ApiErr m route), WebApi.Util.ToHListRecTuple (WebApi.ContentTypes.StripContents (WebApi.Contract.RequestBody m route)), WebApi.ContentTypes.PartDecodings (WebApi.Contract.RequestBody m route), Data.Typeable.Internal.Typeable m, Data.Typeable.Internal.Typeable route, WebApi.Internal.WebApiServer s) => WebApi.Router.Router s (lpiece WebApi.Router.:/ rpiece) '(m, pp) instance (GHC.TypeLits.KnownSymbol rpiece, paths ~ (pp WebApi.Util.:++ '[WebApi.Router.DynamicPiece lpiece, WebApi.Router.StaticPiece rpiece]), paths ~ ((pp WebApi.Util.:++ '[WebApi.Router.DynamicPiece lpiece]) WebApi.Util.:++ '[WebApi.Router.StaticPiece rpiece]), route ~ WebApi.Router.FromPieces paths, WebApi.Internal.ApiHandler s m route, WebApi.Contract.PathParam m route ~ WebApi.Util.HListToTuple (WebApi.Router.FilterDynP paths), WebApi.Param.FromParam 'WebApi.Param.QueryParam (WebApi.Contract.QueryParam m route), WebApi.Param.FromParam 'WebApi.Param.FormParam (WebApi.Contract.FormParam m route), WebApi.Param.FromParam 'WebApi.Param.FileParam (WebApi.Contract.FileParam m route), WebApi.Param.FromParam 'WebApi.Param.Cookie (WebApi.Contract.CookieIn m route), WebApi.Param.FromHeader (WebApi.Contract.HeaderIn m route), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m route) (WebApi.Contract.ApiErr m route), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m route) (WebApi.Contract.ApiOut m route), WebApi.Param.ToHeader (WebApi.Contract.HeaderOut m route), WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Contract.CookieOut m route), WebApi.Param.DecodeParam lpiece, WebApi.Param.ParamErrToApiErr (WebApi.Contract.ApiErr m route), WebApi.Util.ToHListRecTuple (WebApi.ContentTypes.StripContents (WebApi.Contract.RequestBody m route)), WebApi.ContentTypes.PartDecodings (WebApi.Contract.RequestBody m route), Data.Typeable.Internal.Typeable m, Data.Typeable.Internal.Typeable route, WebApi.Internal.WebApiServer s) => WebApi.Router.Router s (lpiece WebApi.Router.:/ rpiece) '(m, pp) instance (route ~ WebApi.Router.FromPieces (pp WebApi.Util.:++ '[WebApi.Router.DynamicPiece t]), WebApi.Internal.ApiHandler s m route, WebApi.Contract.PathParam m route ~ WebApi.Util.HListToTuple (WebApi.Router.FilterDynP (pp WebApi.Util.:++ '[WebApi.Router.DynamicPiece t])), WebApi.Param.FromParam 'WebApi.Param.QueryParam (WebApi.Contract.QueryParam m route), WebApi.Param.FromParam 'WebApi.Param.FormParam (WebApi.Contract.FormParam m route), WebApi.Param.FromParam 'WebApi.Param.FileParam (WebApi.Contract.FileParam m route), WebApi.Param.FromParam 'WebApi.Param.Cookie (WebApi.Contract.CookieIn m route), WebApi.Param.FromHeader (WebApi.Contract.HeaderIn m route), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m route) (WebApi.Contract.ApiErr m route), WebApi.ContentTypes.Encodings (WebApi.Contract.ContentTypes m route) (WebApi.Contract.ApiOut m route), WebApi.Param.ToHeader (WebApi.Contract.HeaderOut m route), WebApi.Param.ToParam 'WebApi.Param.Cookie (WebApi.Contract.CookieOut m route), WebApi.Param.DecodeParam t, WebApi.Param.ParamErrToApiErr (WebApi.Contract.ApiErr m route), WebApi.Util.ToHListRecTuple (WebApi.ContentTypes.StripContents (WebApi.Contract.RequestBody m route)), WebApi.ContentTypes.PartDecodings (WebApi.Contract.RequestBody m route), Data.Typeable.Internal.Typeable m, Data.Typeable.Internal.Typeable route, WebApi.Internal.WebApiServer s) => WebApi.Router.Router s (WebApi.Router.DynamicPiece t) '(m, pp) instance forall (k :: BOX) (k1 :: BOX) (a :: k) (b :: k1). WebApi.Router.MkFormatStr (WebApi.Router.ToPieces (a WebApi.Router.:/ b)) => WebApi.Internal.MkPathFormatString (a WebApi.Router.:/ b) instance GHC.TypeLits.KnownSymbol s => WebApi.Internal.MkPathFormatString (WebApi.Router.Static s) instance (GHC.TypeLits.KnownSymbol s, WebApi.Router.MkFormatStr xs) => WebApi.Router.MkFormatStr (WebApi.Router.StaticPiece s : xs) instance WebApi.Router.MkFormatStr xs => WebApi.Router.MkFormatStr (WebApi.Router.DynamicPiece s : xs) instance WebApi.Router.MkFormatStr '[] -- | Provides the implementation of web api. Given a contract, an -- implementation of the web api can be provided by using -- WebApiServer and ApiHandler. WebApiServer has the -- information pertaining to web api as a whole. ApiHandler -- provides a way to write the handler for a particular API end point. -- -- Comparing with the WebApi.Contract, WebApi and -- ApiContract has the same relationship as WebApiServer -- and ApiHandler. module WebApi.Server -- | Create a WAI application from the information specified in -- WebApiServer, WebApi, ApiContract and -- ApiHandler classes. serverApp :: (iface ~ (ApiInterface server), Router server (Apis iface) '(CUSTOM "", '[])) => ServerSettings -> server -> Application -- | Default server settings. serverSettings :: ServerSettings -- | Type of settings of the server. data ServerSettings -- | Describes the implementation of a single API end point corresponding -- to ApiContract (ApiInterface p) m r class (ApiContract (ApiInterface p) m r) => ApiHandler (p :: *) (m :: *) (r :: *) -- | Handler for the API end point which returns a Response. -- -- TODO : query type parameter is an experimental one used for -- trying out dependently typed params. This parameter will let us refine -- the ApiOut to the structure that is requested by the client. -- for eg : graph.facebook.com/bgolub?fields=id,name,picture -- -- This feature is not finalized and might get changed / removed. -- Currently the return type of handler is equivalent to `Response m r` handler :: (ApiHandler p m r, query ~ '[]) => Tagged query p -> Request m r -> HandlerM p (Query (Response m r) query) -- | Type of Exception raised in a handler. data ApiException m r ApiException :: ApiError m r -> ApiException m r [apiException] :: ApiException m r -> ApiError m r -- | Binds implementation to interface and provides a pluggable handler -- monad for the endpoint handler implementation. class (MonadCatch (HandlerM p), MonadIO (HandlerM p), WebApi (ApiInterface p)) => WebApiServer (p :: *) where type family HandlerM p :: * -> * type family ApiInterface p :: * HandlerM p = IO toIO _ = id -- | Create a value of IO a from HandlerM p a. toIO :: WebApiServer p => p -> HandlerM p a -> IO a -- | Creates a successful response from its components. It is assumed that -- HeaderOut and CookieOut has default definitions. respond :: (Monad handM, (HeaderOut m r) ~ (), (CookieOut m r) ~ ()) => ApiOut m r -> handM (Response m r) -- | Creates a successful response from its components. respondWith :: (Monad handM) => Status -> ApiOut m r -> HeaderOut m r -> CookieOut m r -> handM (Response m r) -- | This function short circuits returning an ApiError.It is -- assumed that HeaderOut and CookieOut has default -- definitions. raise :: (MonadThrow handM, Typeable m, Typeable r) => Status -> ApiErr m r -> handM (Response m r) -- | This function short circuits returning an ApiError. raiseWith :: (MonadThrow handM, Typeable m, Typeable r) => Status -> ApiErr m r -> HeaderOut m r -> CookieOut m r -> handM (Response m r) unTagged :: Tagged s b -> b toTagged :: Proxy s -> b -> Tagged s b -- | Generate a type safe URL for a given route type. The URI can be used -- for setting a base URL if required. link :: (ToParam QueryParam (QueryParam m r), MkPathFormatString r, ToParam PathParam (PathParam m r)) => route m r -> URI -> PathParam m r -> Maybe (QueryParam m r) -> URI -- | Once a contract is defined for a web api, a mock server and client for -- it can be obtained. Arbitrary instances of the data types used -- in Request and Response is used to generate the request -- and response. Note that if a different mocking behaviour is required, -- it is easy enough to write a different implementation. Please take a -- look at the reference implementation of MockServer for details. module WebApi.Mock -- | Default mock server settings. mockServerSettings :: MockServerSettings -- | Create a mock response from endpoint information and -- MockServerSettings mockResponse :: (Arbitrary (ApiOut m r), Arbitrary (HeaderOut m r), Arbitrary (CookieOut m r), Arbitrary (ApiErr m r), Typeable m, Typeable r) => route m r -> MockServerSettings -> IO (Response m r) -- | Create a mock server. mockServer :: (Router (MockServer p) (Apis p) '(CUSTOM "", '[])) => ServerSettings -> MockServer p -> Application -- | Datatype representing a mock server. The parameterization over -- p allows it to be a mock server for any p. newtype MockServer p MockServer :: MockServerSettings -> MockServer p [mockServerSett] :: MockServer p -> MockServerSettings -- | Settings related to mock server. data MockServerSettings MockServerSettings :: ResponseData -> MockServerSettings [responseData] :: MockServerSettings -> ResponseData -- | Datatype representing a mock exception. This exception will be put -- inside OtherError. data MockServerException MockServerException :: String -> MockServerException [exceptionMsg] :: MockServerException -> String -- | Determine the data constructor of Response to be generated in -- mockServer. data ResponseData SuccessData :: ResponseData ApiErrorData :: Status -> ResponseData OtherErrorData :: ResponseData -- | Create a mock client. mockClient :: (Arbitrary (PathParam m r), Arbitrary (QueryParam m r), Arbitrary (FormParam m r), Arbitrary (FileParam m r), Arbitrary (HeaderIn m r), Arbitrary (CookieIn m r), Arbitrary (HListToTuple (StripContents (RequestBody m r))), SingMethod m) => route m r -> IO (Request m r) instance GHC.Generics.Selector WebApi.Mock.S1_0_0MockServerException instance GHC.Generics.Constructor WebApi.Mock.C1_0MockServerException instance GHC.Generics.Datatype WebApi.Mock.D1MockServerException instance GHC.Generics.Generic WebApi.Mock.MockServerException instance GHC.Show.Show WebApi.Mock.MockServerException instance GHC.Show.Show (WebApi.Mock.MockServer p) instance GHC.Classes.Eq (WebApi.Mock.MockServer p) instance GHC.Show.Show WebApi.Mock.MockServerSettings instance GHC.Classes.Eq WebApi.Mock.MockServerSettings instance GHC.Show.Show WebApi.Mock.ResponseData instance GHC.Classes.Eq WebApi.Mock.ResponseData instance WebApi.Contract.WebApi p => WebApi.Internal.WebApiServer (WebApi.Mock.MockServer p) instance (WebApi.Contract.ApiContract p m r, Test.QuickCheck.Arbitrary.Arbitrary (WebApi.Contract.ApiOut m r), Test.QuickCheck.Arbitrary.Arbitrary (WebApi.Contract.ApiErr m r), Test.QuickCheck.Arbitrary.Arbitrary (WebApi.Contract.HeaderOut m r), Test.QuickCheck.Arbitrary.Arbitrary (WebApi.Contract.CookieOut m r), Data.Typeable.Internal.Typeable m, Data.Typeable.Internal.Typeable r) => WebApi.Internal.ApiHandler (WebApi.Mock.MockServer p) m r instance GHC.Exception.Exception WebApi.Mock.MockServerException module WebApi