module Network.TableStorage.Types (
AccountKey(..),
Signature(..),
AuthHeader(..),
Account(..),
SharedKeyAuth(..),
EntityKey(..),
EntityColumn(..),
Entity(..),
EntityQuery(..),
ComparisonType(..),
EntityFilter(..),
QueryResponse(..),
TableStorage,
TableConf(..),
TableError(..)
) where
import Data.Time ( UTCTime )
import Network.HTTP.Types
import Network.HTTP.Conduit
import Control.Monad.Reader
import Control.Monad.Error
type TableStorage = ErrorT TableError (ReaderT TableConf IO)
data TableConf = TableConf
{ tableAccount :: Account
, httpManager :: Maybe Manager
, httpProxy :: Maybe Proxy
}
data TableError = TableParseError
| TableUnknownError
| TableOtherError String
instance Error TableError where
noMsg = TableUnknownError
strMsg = TableOtherError
instance Show TableError where
show TableParseError = "Unable to parse result"
show TableUnknownError = "Unknown table storage error"
show (TableOtherError msg) = msg
newtype AccountKey = AccountKey { unAccountKey :: String } deriving (Show, Eq)
newtype Signature = Signature { unSignature :: String } deriving (Show, Eq)
newtype AuthHeader = AuthHeader { unAuthHeader :: String } deriving (Show, Eq)
data Account = Account
{ accountScheme :: String
, accountHost :: String
, accountPort :: Int
, accountKey :: AccountKey
, accountName :: String
, accountResourcePrefix :: String
} deriving (Show, Eq)
data SharedKeyAuth = SharedKeyAuth
{ sharedKeyAuthVerb :: Method
, sharedKeyAuthContentMD5 :: String
, sharedKeyAuthContentType :: String
, sharedKeyAuthDate :: String
, sharedKeyAuthCanonicalizedResource :: String
} deriving (Show, Eq)
data EntityKey = EntityKey
{ ekPartitionKey :: String
, ekRowKey :: String
} deriving (Show, Eq)
data EntityColumn =
EdmBinary (Maybe String) |
EdmBoolean (Maybe Bool) |
EdmDateTime (Maybe UTCTime) |
EdmDouble (Maybe Double) |
EdmGuid (Maybe String) |
EdmInt32 (Maybe Int) |
EdmInt64 (Maybe Int) |
EdmString (Maybe String)
deriving (Show, Eq)
data QueryResponse = QueryResponse Status String
data Entity = Entity { entityKey :: EntityKey,
entityColumns :: [(String, EntityColumn)] } deriving Show
data EntityQuery = EntityQuery
{ eqPageSize :: Maybe Int
, eqFilter :: Maybe EntityFilter
} deriving (Show, Eq)
data ComparisonType =
Equal |
GreaterThan |
GreaterThanOrEqual |
LessThan |
LessThanOrEqual |
NotEqual
deriving (Show, Eq)
data EntityFilter =
And [EntityFilter] |
Or [EntityFilter] |
Not EntityFilter |
CompareBoolean String Bool |
CompareDateTime String ComparisonType UTCTime |
CompareDouble String ComparisonType Double |
CompareGuid String String |
CompareInt32 String ComparisonType Integer |
CompareInt64 String ComparisonType Integer |
CompareString String ComparisonType String
deriving (Show, Eq)