module Data.OpenDataTable
( Binding(..)
, Delete(..)
, Function(..)
, FunctionType(..)
, Input(..)
, InputInfo(..)
, InputType(..)
, Insert(..)
, NextPage(..)
, Meta(..)
, OpenDataTable(..)
, Paging(..)
, PagingModel(..)
, PagingSize(..)
, PagingStart(..)
, PagingTotal(..)
, ParamType(..)
, Product(..)
, SecurityLevel(..)
, Select(..)
, Update(..) ) where
import Language.Haskell.TH.Lift (deriveLift)
import Text.Read
import Text.ParserCombinators.ReadP hiding (choice)
strValMap = map (\(x, y) -> lift $ string x >> return y)
data OpenDataTable
= OpenDataTable
{ openDataTableXmlns :: Maybe String
, openDataTableSecurityLevel :: Maybe SecurityLevel
, openDataTableHttps :: Maybe Bool
, openDataTableMeta :: Meta
, openDataTableExecute :: Maybe String
, openDataTableBindings :: [Binding]
} deriving (Read, Show, Eq)
data SecurityLevel
= SecurityLevelAny | SecurityLevelApp | SecurityLevelUser
deriving (Eq)
instance Read SecurityLevel where
readPrec = choice $ strValMap
[ ("any", SecurityLevelAny)
, ("app", SecurityLevelApp)
, ("user", SecurityLevelUser) ]
instance Show SecurityLevel where
showsPrec _ SecurityLevelAny = showString "any"
showsPrec _ SecurityLevelApp = showString "app"
showsPrec _ SecurityLevelUser = showString "user"
data Meta
= Meta
{ metaAuthor :: Maybe String
, metaDescription :: Maybe String
, metaDocumentationURL :: Maybe String
, metaApiKeyURL :: Maybe String
, metaSampleQuery :: [String]
} deriving (Read, Show, Eq)
data Binding
= SelectBinding Select
| InsertBinding Insert
| UpdateBinding Update
| DeleteBinding Delete
| FunctionBinding Function
deriving (Read, Show, Eq)
data Select
= Select
{ selectItemPath :: Maybe String
, selectProduces :: Maybe Product
, selectPollingFrequencySeconds :: Maybe Integer
, selectUrl :: Maybe String
, selectInputs :: [Input]
, selectExecute :: Maybe String
, selectPaging :: Maybe Paging
} deriving (Read, Show, Eq)
data Paging
= Paging
{ pagingModel :: Maybe PagingModel
, pagingMatrix :: Maybe Bool
, pagingPageSize :: Maybe PagingSize
, pagingStart :: Maybe PagingStart
, pagingTotal :: Maybe PagingTotal
, pagingNextPage :: Maybe NextPage
} deriving (Read, Show, Eq)
data PagingModel
= PagingModelOffset | PagingModelPage | PagingModelURL
deriving (Eq)
instance Read PagingModel where
readPrec = choice $ strValMap
[ ("offset", PagingModelOffset)
, ("page", PagingModelPage)
, ("url", PagingModelURL) ]
instance Show PagingModel where
showsPrec _ PagingModelOffset = showString "offset"
showsPrec _ PagingModelPage = showString "page"
showsPrec _ PagingModelURL = showString "url"
data PagingSize
= PagingSize
{ pagingSizeId :: String
, pagingSizeMax :: Integer
} deriving (Read, Show, Eq)
data PagingStart
= PagingStart
{ pagingStartId :: String
, pagingStartDefault :: Integer
} deriving (Read, Show, Eq)
data PagingTotal
= PagingTotal
{ pagingTotalDefault :: Integer
} deriving (Read, Show, Eq)
data NextPage
= NextPage
{ nextPagePath :: String
} deriving (Read, Show, Eq)
data Insert
= Insert
{ insertItemPath :: Maybe String
, insertPollingFrequencySeconds :: Maybe Integer
, insertProduces :: Maybe Product
, insertUrls :: [String]
, insertInputs :: [Input]
} deriving (Read, Show, Eq)
data Update
= Update
{ updateItemPath :: Maybe String
, updatePollingFrequencySeconds :: Maybe Integer
, updateProduces :: Maybe Product
, updateUrls :: [String]
, updateInputs :: [Input]
} deriving (Read, Show, Eq)
data Delete
= Delete
{ deleteItemPath :: Maybe String
, deletePollingFrequencySeconds :: Maybe Integer
, deleteProduces :: Maybe Product
, deleteUrls :: [String]
, deleteInputs :: [Input]
} deriving (Read, Show, Eq)
data Product
= ProductXML | ProductJSON
deriving (Eq)
instance Read Product where
readPrec = choice $ strValMap
[ ("XML", ProductXML)
, ("JSON", ProductJSON) ]
instance Show Product where
showsPrec _ ProductXML = showString "XML"
showsPrec _ ProductJSON = showString "JSON"
data Function
= Function
{ functionName :: Maybe String
, functionType :: FunctionType
} deriving (Read, Show, Eq)
data FunctionType
= FunctionTypeStream | FunctionTypeReduce
deriving (Eq)
instance Read FunctionType where
readPrec = choice $ strValMap
[ ("stream", FunctionTypeStream)
, ("reduce", FunctionTypeReduce) ]
instance Show FunctionType where
showsPrec _ FunctionTypeStream = showString "stream"
showsPrec _ FunctionTypeReduce = showString "reduce"
data Input
= InputKey InputInfo
| InputValue InputInfo
| InputMap InputInfo
deriving (Read, Show, Eq)
data InputInfo
= InputInfo
{ inputInfoId :: String
, inputInfoAs :: Maybe String
, inputInfoType :: InputType
, inputInfoParamType :: ParamType
, inputInfoRequired :: Bool
, inputInfoDefault :: Maybe String
, inputInfoPrivate :: Maybe Bool
, inputInfoConst :: Maybe Bool
, inputInfoBatchable :: Maybe Bool
, inputInfoMaxBatchItems :: Maybe Integer
} deriving (Read, Show, Eq)
data InputType =
InputTypeBool |
InputTypeDate |
InputTypeDouble |
InputTypeFloat |
InputTypeInt |
InputTypeString
deriving (Eq)
instance Read InputType where
readPrec = choice $ strValMap
[ ("xs:bool", InputTypeBool)
, ("xs:boolean", InputTypeBool)
, ("xs:date", InputTypeDate)
, ("xs:double", InputTypeDouble)
, ("xs:float", InputTypeFloat)
, ("xs:int", InputTypeInt)
, ("xs:integer", InputTypeInt)
, ("xs:number", InputTypeDouble)
, ("xs:string", InputTypeString)]
instance Show InputType where
showsPrec _ InputTypeBool = showString "xs:bool"
showsPrec _ InputTypeDate = showString "xs:date"
showsPrec _ InputTypeDouble = showString "xs:double"
showsPrec _ InputTypeFloat = showString "xs:float"
showsPrec _ InputTypeInt = showString "xs:int"
showsPrec _ InputTypeString = showString "xs:string"
data ParamType
= ParamTypeQuery | ParamTypeMatrix | ParamTypeHeader
| ParamTypePath | ParamTypeVariable
deriving (Eq)
instance Read ParamType where
readPrec = choice $ strValMap
[ ("query", ParamTypeQuery)
, ("matrix", ParamTypeMatrix)
, ("header", ParamTypeHeader)
, ("path", ParamTypePath)
, ("variable", ParamTypeVariable) ]
instance Show ParamType where
showsPrec _ ParamTypeQuery = showString "query"
showsPrec _ ParamTypeMatrix = showString "matrix"
showsPrec _ ParamTypeHeader = showString "header"
showsPrec _ ParamTypePath = showString "path"
showsPrec _ ParamTypeVariable = showString "variable"
$(deriveLift ''OpenDataTable)
$(deriveLift ''SecurityLevel)
$(deriveLift ''Delete)
$(deriveLift ''Meta)
$(deriveLift ''Binding)
$(deriveLift ''Select)
$(deriveLift ''Paging)
$(deriveLift ''PagingModel)
$(deriveLift ''PagingSize)
$(deriveLift ''PagingStart)
$(deriveLift ''PagingTotal)
$(deriveLift ''NextPage)
$(deriveLift ''Insert)
$(deriveLift ''Update)
$(deriveLift ''Product)
$(deriveLift ''Function)
$(deriveLift ''FunctionType)
$(deriveLift ''Input)
$(deriveLift ''InputInfo)
$(deriveLift ''InputType)
$(deriveLift ''ParamType)