webapi-0.3: WAI based library for web api

LicenseBSD3
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

WebApi.Param

Contents

Description

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.

Synopsis

Serialization

class ToParam parK a where Source

Serialize a type to a given type of kind ParamK.

Minimal complete definition

Nothing

Methods

toParam :: Proxy (parK :: ParamK) -> ByteString -> a -> [SerializedData parK] Source

Instances

ToParam parK () Source 
ToParam QueryParam Bool Source 
ToParam QueryParam Char Source 
ToParam QueryParam Double Source 
ToParam QueryParam Float Source 
ToParam QueryParam Int Source 
ToParam QueryParam Int8 Source 
ToParam QueryParam Int16 Source 
ToParam QueryParam Int32 Source 
ToParam QueryParam Int64 Source 
ToParam QueryParam Integer Source 
ToParam QueryParam Word Source 
ToParam QueryParam Word8 Source 
ToParam QueryParam Word16 Source 
ToParam QueryParam Word32 Source 
ToParam QueryParam Word64 Source 
ToParam QueryParam ByteString Source 
ToParam QueryParam LocalTime Source 
ToParam QueryParam TimeOfDay Source 
ToParam QueryParam UTCTime Source 
ToParam QueryParam Day Source 
ToParam QueryParam Text Source 
ToParam FormParam Bool Source 
ToParam FormParam Char Source 
ToParam FormParam Double Source 
ToParam FormParam Float Source 
ToParam FormParam Int Source 
ToParam FormParam Int8 Source 
ToParam FormParam Int16 Source 
ToParam FormParam Int32 Source 
ToParam FormParam Int64 Source 
ToParam FormParam Integer Source 
ToParam FormParam Word Source 
ToParam FormParam Word8 Source 
ToParam FormParam Word16 Source 
ToParam FormParam Word32 Source 
ToParam FormParam Word64 Source 
ToParam FormParam ByteString Source 
ToParam FormParam LocalTime Source 
ToParam FormParam TimeOfDay Source 
ToParam FormParam UTCTime Source 
ToParam FormParam Day Source 
ToParam FormParam Text Source 
ToParam FileParam FileInfo Source 
ToParam PathParam Bool Source 
ToParam PathParam Char Source 
ToParam PathParam Double Source 
ToParam PathParam Float Source 
ToParam PathParam Int Source 
ToParam PathParam Int8 Source 
ToParam PathParam Int16 Source 
ToParam PathParam Int32 Source 
ToParam PathParam Int64 Source 
ToParam PathParam Integer Source 
ToParam PathParam Word Source 
ToParam PathParam Word8 Source 
ToParam PathParam Word16 Source 
ToParam PathParam Word32 Source 
ToParam PathParam Word64 Source 
ToParam PathParam ByteString Source 
ToParam PathParam UTCTime Source 
ToParam PathParam Day Source 
ToParam PathParam Text Source 
ToParam Cookie Bool Source 
ToParam Cookie Char Source 
ToParam Cookie Double Source 
ToParam Cookie Float Source 
ToParam Cookie Int Source 
ToParam Cookie Int8 Source 
ToParam Cookie Int16 Source 
ToParam Cookie Int32 Source 
ToParam Cookie Int64 Source 
ToParam Cookie Integer Source 
ToParam Cookie Word Source 
ToParam Cookie Word8 Source 
ToParam Cookie Word16 Source 
ToParam Cookie Word32 Source 
ToParam Cookie Word64 Source 
ToParam Cookie ByteString Source 
ToParam Cookie LocalTime Source 
ToParam Cookie TimeOfDay Source 
ToParam Cookie UTCTime Source 
ToParam Cookie Day Source 
ToParam Cookie Text Source 
ToParam par a => ToParam par (Vector a) Source 
ToParam par a => ToParam par [a] Source 
ToParam par a => ToParam par (Maybe a) Source 
EncodeParam a => ToParam QueryParam (NonNested a) Source 
ToJSON a => ToParam QueryParam (JsonOf a) Source 
EncodeParam a => ToParam QueryParam (OptValue a) Source 
EncodeParam a => ToParam FormParam (NonNested a) Source 
ToJSON a => ToParam FormParam (JsonOf a) Source 
EncodeParam a => ToParam FormParam (OptValue a) Source 
ToJSON a => ToParam PathParam (JsonOf a) Source 
EncodeParam a => ToParam Cookie (NonNested a) Source 
ToParam Cookie a => ToParam Cookie (CookieInfo a) Source 
ToJSON a => ToParam Cookie (JsonOf a) Source 
EncodeParam a => ToParam Cookie (OptValue a) Source 
(ToParam par a, ToParam par b) => ToParam par (Either a b) Source 
(EncodeParam a, EncodeParam b) => ToParam PathParam (a, b) Source 
(EncodeParam a, EncodeParam b, EncodeParam c) => ToParam PathParam (a, b, c) Source 
(EncodeParam a, EncodeParam b, EncodeParam c, EncodeParam d) => ToParam PathParam (a, b, c, d) Source 
(EncodeParam a, EncodeParam b, EncodeParam c, EncodeParam d, EncodeParam e) => ToParam PathParam (a, b, c, d, e) Source 
(EncodeParam a, EncodeParam b, EncodeParam c, EncodeParam d, EncodeParam e, EncodeParam f) => ToParam PathParam (a, b, c, d, e, f) Source 
(EncodeParam a, EncodeParam b, EncodeParam c, EncodeParam d, EncodeParam e, EncodeParam f, EncodeParam g, EncodeParam h) => ToParam PathParam (a, b, c, d, e, f, g, h) Source 
(EncodeParam a, EncodeParam b, EncodeParam c, EncodeParam d, EncodeParam e, EncodeParam f, EncodeParam g, EncodeParam h, EncodeParam i) => ToParam PathParam (a, b, c, d, e, f, g, h, i) Source 
(EncodeParam a, EncodeParam b, EncodeParam c, EncodeParam d, EncodeParam e, EncodeParam f, EncodeParam g, EncodeParam h, EncodeParam i, EncodeParam j) => ToParam PathParam (a, b, c, d, e, f, g, h, i, j) Source 

class ToHeader a where Source

Serialize a type to the header params

Minimal complete definition

Nothing

Methods

toHeader :: a -> [Header] Source

Instances

toQueryParam :: ToParam QueryParam a => a -> Query Source

Serialize a type into query params.

toFormParam :: ToParam FormParam a => a -> [(ByteString, ByteString)] Source

Serialize a type into form params.

toFileParam :: ToParam FileParam a => a -> [(ByteString, FileInfo FilePath)] Source

Serialize a type into file params.

toPathParam :: ToParam PathParam a => a -> [ByteString] Source

Serialize a type into path params.

toCookie :: ToParam Cookie a => a -> [(ByteString, CookieInfo ByteString)] Source

Serialize a type into cookie.

toNonNestedParam :: ToParam parK (NonNested a) => Proxy (parK :: ParamK) -> ByteString -> a -> [SerializedData parK] Source

Serialize a type without nesting.

Deserialization

class FromParam parK a where Source

(Try to) Deserialize a type from a given type of kind ParamK.

Minimal complete definition

Nothing

Methods

fromParam :: Proxy (parK :: ParamK) -> ByteString -> Trie (DeSerializedData parK) -> Validation [ParamErr] a Source

Instances

FromParam parK () Source 
FromParam QueryParam Bool Source 
FromParam QueryParam Char Source 
FromParam QueryParam Double Source 
FromParam QueryParam Float Source 
FromParam QueryParam Int Source 
FromParam QueryParam Int8 Source 
FromParam QueryParam Int16 Source 
FromParam QueryParam Int32 Source 
FromParam QueryParam Int64 Source 
FromParam QueryParam Integer Source 
FromParam QueryParam Word Source 
FromParam QueryParam Word8 Source 
FromParam QueryParam Word16 Source 
FromParam QueryParam Word32 Source 
FromParam QueryParam Word64 Source 
FromParam QueryParam ByteString Source 
FromParam QueryParam LocalTime Source 
FromParam QueryParam TimeOfDay Source 
FromParam QueryParam UTCTime Source 
FromParam QueryParam Day Source 
FromParam QueryParam Text Source 
FromParam FormParam Bool Source 
FromParam FormParam Char Source 
FromParam FormParam Double Source 
FromParam FormParam Float Source 
FromParam FormParam Int Source 
FromParam FormParam Int8 Source 
FromParam FormParam Int16 Source 
FromParam FormParam Int32 Source 
FromParam FormParam Int64 Source 
FromParam FormParam Integer Source 
FromParam FormParam Word Source 
FromParam FormParam Word8 Source 
FromParam FormParam Word16 Source 
FromParam FormParam Word32 Source 
FromParam FormParam Word64 Source 
FromParam FormParam ByteString Source 
FromParam FormParam LocalTime Source 
FromParam FormParam TimeOfDay Source 
FromParam FormParam UTCTime Source 
FromParam FormParam Day Source 
FromParam FormParam Text Source 
FromParam FileParam FileInfo Source 
FromParam Cookie Bool Source 
FromParam Cookie Char Source 
FromParam Cookie Double Source 
FromParam Cookie Float Source 
FromParam Cookie Int Source 
FromParam Cookie Int8 Source 
FromParam Cookie Int16 Source 
FromParam Cookie Int32 Source 
FromParam Cookie Int64 Source 
FromParam Cookie Integer Source 
FromParam Cookie Word Source 
FromParam Cookie Word8 Source 
FromParam Cookie Word16 Source 
FromParam Cookie Word32 Source 
FromParam Cookie Word64 Source 
FromParam Cookie ByteString Source 
FromParam Cookie LocalTime Source 
FromParam Cookie TimeOfDay Source 
FromParam Cookie UTCTime Source 
FromParam Cookie Day Source 
FromParam Cookie Text Source 
FromParam par a => FromParam par (Vector a) Source 
FromParam par a => FromParam par [a] Source 
FromParam par a => FromParam par (Maybe a) Source 
(DecodeParam a, Typeable * a) => FromParam QueryParam (NonNested a) Source 
DecodeParam a => FromParam QueryParam (OptValue a) Source 
(DecodeParam a, Typeable * a) => FromParam FormParam (NonNested a) Source 
DecodeParam a => FromParam FormParam (OptValue a) Source 
(DecodeParam a, Typeable * a) => FromParam Cookie (NonNested a) Source 
FromParam Cookie a => FromParam Cookie (CookieInfo a) Source 
DecodeParam a => FromParam Cookie (OptValue a) Source 
(FromParam par a, FromParam par b) => FromParam par (Either a b) Source 

class FromHeader a where Source

(Try to) Deserialize a type from the header params

Minimal complete definition

Nothing

Methods

fromHeader :: [Header] -> Validation [ParamErr] a Source

Instances

newtype Validation e a Source

Datatype representing the parsed result of params.

Constructors

Validation 

Fields

getValidation :: Either e a
 

Instances

data ParamErr Source

Errors that occured during deserialization.

Constructors

NotFound ByteString

The key was not found.

ParseErr ByteString Text

A parse error occured while deserializing the type.

class ParamErrToApiErr apiErr where Source

Convert the ParamErr that occured during deserialization into ApiErr type which can then be put in Response.

Methods

toApiErr :: [ParamErr] -> apiErr Source

fromQueryParam :: FromParam QueryParam a => Query -> Validation [ParamErr] a Source

(Try to) Deserialize a type from query params.

fromFormParam :: FromParam FormParam a => [(ByteString, ByteString)] -> Validation [ParamErr] a Source

(Try to) Deserialize a type from form params.

fromFileParam :: FromParam FileParam a => [(ByteString, FileInfo FilePath)] -> Validation [ParamErr] a Source

(Try to) Deserialize a type from file params.

fromCookie :: FromParam Cookie a => [(ByteString, ByteString)] -> Validation [ParamErr] a Source

(Try to) Deserialize a type from cookie.

lookupParam :: Proxy (parK :: ParamK) -> ByteString -> Trie (DeSerializedData parK) -> Maybe (DeSerializedData parK) Source

Lookup a value from the Trie using the given key.

fromNonNestedParam :: FromParam parK (NonNested a) => Proxy (parK :: ParamK) -> ByteString -> Trie (DeSerializedData parK) -> Validation [ParamErr] a Source

(Try to) Deserialize a type without nesting.

Wrappers

newtype JsonOf a Source

Serializing JsonOf will produce a JSON representation of the value contained within. This is useful if params has to be sent as JSON.

Constructors

JsonOf 

Fields

getValue :: a
 

Instances

ToJSON a => ToParam QueryParam (JsonOf a) Source 
ToJSON a => ToParam FormParam (JsonOf a) Source 
ToJSON a => ToParam PathParam (JsonOf a) Source 
ToJSON a => ToParam Cookie (JsonOf a) Source 
Eq a => Eq (JsonOf a) Source 
Ord a => Ord (JsonOf a) Source 
Read a => Read (JsonOf a) Source 
Show a => Show (JsonOf a) Source 
ToJSON a => ToJSON (JsonOf a) Source 
FromJSON a => FromJSON (JsonOf a) Source 
FromJSON a => DecodeParam (JsonOf a) Source 
ToJSON a => EncodeParam (JsonOf a) Source 

newtype OptValue a Source

Use this type if a key is required but the value is optional.

Constructors

OptValue 

Fields

toMaybe :: Maybe a
 

newtype FileInfo Source

A type for holding a file.

Constructors

FileInfo 

Fields

fileInfo :: FileInfo FilePath
 

newtype NonNested a Source

Use this type if for serialization / deserialization nesting is not required. The type contained within most likely requires EncodeParam / DecodeParam.

Constructors

NonNested 

Fields

getNonNestedParam :: a
 

Helpers

data ParamK Source

(Kind) Describes the various types of Param.

filePath :: FileInfo -> FilePath Source

Obtain the file path from FileInfo.

nest :: ByteString -> ByteString -> ByteString Source

Nest the key with a prefix.

nest "pfx" "key" == "pfx.key"
nest "" "key" == "key"

Generic (De)Serialization fn

genericToQueryParam :: (Generic a, GToParam (Rep a) QueryParam) => ParamSettings -> ByteString -> a -> [QueryItem] Source

genericToFileParam :: (Generic a, GToParam (Rep a) FileParam) => ParamSettings -> ByteString -> a -> [(ByteString, FileInfo FilePath)] Source

genericFromFileParam :: (Generic a, GFromParam (Rep a) FileParam) => ParamSettings -> ByteString -> Trie (FileInfo FilePath) -> Validation [ParamErr] a Source