Copyright | Soostone Inc, Chris Allen |
---|---|
License | BSD3 |
Maintainer | Ozgun Ataman <ozgun.ataman@soostone.com> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Aws.DynamoDb.Core
Contents
Description
Shared types and utilities for DyanmoDb functionality.
- data Region = Region {
- rUri :: ByteString
- rName :: ByteString
- ddbLocal :: Region
- ddbUsEast1 :: Region
- ddbUsWest1 :: Region
- ddbUsWest2 :: Region
- ddbEuWest1 :: Region
- ddbApNe1 :: Region
- ddbApSe1 :: Region
- ddbApSe2 :: Region
- ddbSaEast1 :: Region
- data DdbConfiguration qt = DdbConfiguration {
- ddbcRegion :: Region
- ddbcProtocol :: Protocol
- ddbcPort :: Maybe Int
- data DValue
- = DNum Scientific
- | DString Text
- | DBinary ByteString
- | DNumSet (Set Scientific)
- | DStringSet (Set Text)
- | DBinSet (Set ByteString)
- class DynData (DynRep a) => DynVal a where
- toValue :: DynVal a => a -> DValue
- fromValue :: DynVal a => DValue -> Maybe a
- newtype Bin a = Bin {
- getBin :: a
- class Ord a => DynData a where
- newtype DynBinary = DynBinary {}
- newtype DynNumber = DynNumber {}
- newtype DynString = DynString {
- unDynString :: Text
- data Attribute = Attribute {}
- parseAttributeJson :: Value -> Parser [Attribute]
- attributeJson :: Attribute -> Pair
- attributesJson :: [Attribute] -> Value
- attrTuple :: Attribute -> (Text, DValue)
- attr :: DynVal a => Text -> a -> Attribute
- attrAs :: DynVal a => Proxy a -> Text -> a -> Attribute
- text :: Proxy Text
- int :: Proxy Integer
- double :: Proxy Double
- data PrimaryKey = PrimaryKey {}
- hk :: Text -> DValue -> PrimaryKey
- hrk :: Text -> DValue -> Text -> DValue -> PrimaryKey
- type Item = Map Text DValue
- item :: [Attribute] -> Item
- attributes :: Map Text DValue -> [Attribute]
- class ToDynItem a where
- class FromDynItem a where
- fromItem :: FromDynItem a => Item -> Either String a
- newtype Parser a = Parser {
- runParser :: forall f r. Failure f r -> Success a f r -> f r
- getAttr :: forall a. (Typeable a, DynVal a) => Text -> Item -> Parser a
- getAttr' :: forall a. (Typeable a, DynVal a) => Text -> Item -> Parser (Maybe a)
- data Conditions = Conditions CondMerge [Condition]
- conditionsJson :: Text -> Conditions -> [Pair]
- expectsJson :: Conditions -> [Pair]
- data Condition = Condition {}
- conditionJson :: Condition -> Pair
- data CondOp
- data CondMerge
- data ConsumedCapacity = ConsumedCapacity {
- capacityUnits :: Int64
- capacityGlobalIndex :: [(Text, Int64)]
- capacityLocalIndex :: [(Text, Int64)]
- capacityTableUnits :: Maybe Int64
- capacityTable :: Text
- data ReturnConsumption
- data ItemCollectionMetrics = ItemCollectionMetrics {
- icmKey :: (Text, DValue)
- icmEstimate :: [Double]
- data ReturnItemCollectionMetrics
- data UpdateReturn
- data QuerySelect
- querySelectJson :: QuerySelect -> [Pair]
- class DynSize a where
- nullAttr :: Attribute -> Bool
- data DdbResponse = DdbResponse {}
- data DdbErrCode
- = AccessDeniedException
- | ConditionalCheckFailedException
- | IncompleteSignatureException
- | InvalidSignatureException
- | LimitExceededException
- | MissingAuthenticationTokenException
- | ProvisionedThroughputExceededException
- | ResourceInUseException
- | ResourceNotFoundException
- | ThrottlingException
- | ValidationException
- | RequestTooLarge
- | InternalFailure
- | InternalServerError
- | ServiceUnavailableException
- | SerializationException
- shouldRetry :: DdbErrCode -> Bool
- data DdbError = DdbError {}
- ddbSignQuery :: ToJSON a => ByteString -> a -> DdbConfiguration qt -> SignatureData -> SignedQuery
- data AmazonError = AmazonError {}
- ddbResponseConsumer :: FromJSON a => IORef DdbResponse -> HTTPResponseConsumer a
- ddbHttp :: Region -> DdbConfiguration NormalQuery
- ddbHttps :: Region -> DdbConfiguration NormalQuery
Configuration and Regions
data Region
Constructors
Region | |
Fields
|
ddbUsEast1 :: Region
ddbUsWest1 :: Region
ddbUsWest2 :: Region
ddbEuWest1 :: Region
ddbSaEast1 :: Region
data DdbConfiguration qt
Constructors
DdbConfiguration | |
Fields
|
DynamoDB values
data DValue
Value types natively recognized by DynamoDb. We pretty much exactly reflect the AWS API onto Haskell types.
Constructors
DNum Scientific | |
DString Text | |
DBinary ByteString | Binary data will automatically be base64 marshalled. |
DNumSet (Set Scientific) | |
DStringSet (Set Text) | |
DBinSet (Set ByteString) | Binary data will automatically be base64 marshalled. |
Converting to/from DValue
class DynData (DynRep a) => DynVal a where
Class of Haskell types that can be represented as DynamoDb values.
This is the conversion layer; instantiate this class for your own
types and then use the toValue
and fromValue
combinators to
convert in application code.
Each Haskell type instantiated with this class will map to a DynamoDb-supported type that most naturally represents it.
Instances
DynVal Bool | Encoded as 0 and 1. |
DynVal Double | |
DynVal Int | |
DynVal Int8 | |
DynVal Int16 | |
DynVal Int32 | |
DynVal Int64 | |
DynVal Integer | |
DynVal Word8 | |
DynVal Word16 | |
DynVal Word32 | |
DynVal Word64 | |
DynVal ByteString | |
DynVal Text | |
DynVal UTCTime | Losslessly encoded via |
DynVal Day | Encoded as number of days |
DynVal DValue | |
(DynData (DynRep [a]), DynVal a) => DynVal [a] | Any singular |
(DynData (DynRep (Set a)), DynVal a, Ord a) => DynVal (Set a) | Any singular |
Serialize a => DynVal (Bin a) |
newtype Bin a
Type wrapper for binary data to be written to DynamoDB. Wrap any
Serialize
instance in there and DynVal
will know how to
automatically handle conversions in binary form.
Defining new DynVal
instances
class Ord a => DynData a where
An internally used closed typeclass for values that have direct DynamoDb representations. Based on AWS API, this is basically numbers, strings and binary blobs.
This is here so that any DynVal
haskell value can automatically
be lifted to a list or a Set
without any instance code
duplication.
Do not try to create your own instances.
newtype DynBinary
Binary values stored in DynamoDb. Only used in defining new
DynVal
instances.
Constructors
DynBinary | |
Fields |
newtype DynNumber
Numeric values stored in DynamoDb. Only used in defining new
DynVal
instances.
Constructors
DynNumber | |
Fields |
newtype DynString
String values stored in DynamoDb. Only used in defining new
DynVal
instances.
Constructors
DynString | |
Fields
|
Working with key/value pairs
data Attribute
A key-value pair
parseAttributeJson :: Value -> Parser [Attribute]
Parse a JSON object that contains attributes
attributeJson :: Attribute -> Pair
Convert into JSON pair
attributesJson :: [Attribute] -> Value
Convert into JSON object for AWS.
attrAs :: DynVal a => Proxy a -> Text -> a -> Attribute
attr
with type witness to help with cases where you're manually
supplying values in code.
> item [ attrAs text "name" "john" ]
data PrimaryKey
Primary keys consist of either just a Hash key (mandatory) or a hash key and a range key (optional).
Instances
hk :: Text -> DValue -> PrimaryKey
Construct a hash-only primary key.
>>>
hk "user-id" "ABCD"
>>>
hk "user-id" (mkVal 23)
Arguments
:: Text | Hash key name |
-> DValue | Hash key value |
-> Text | Range key name |
-> DValue | Range key value |
-> PrimaryKey |
Construct a hash-and-range primary key.
Working with objects (attribute collections)
class ToDynItem a where
class FromDynItem a where
Types parseable from DynamoDb Item
collections.
User getAttr
family of functions to applicatively or monadically
parse into your custom types.
Instances
FromDynItem Item | |
(Typeable * a, DynVal a) => FromDynItem [(Text, a)] | |
(Typeable * a, DynVal a) => FromDynItem (Map Text a) |
fromItem :: FromDynItem a => Item -> Either String a
Parse an Item
into target type using the FromDynItem
instance.
newtype Parser a
A continuation-based parser type.
Convenience combinator for parsing fields from an Item
returned
by DynamoDb.
Arguments
:: (Typeable a, DynVal a) | |
=> Text | Attribute name |
-> Item | Item from DynamoDb |
-> Parser (Maybe a) |
Parse attribute if it's present in the Item
. Fail if attribute
is present but conversion fails.
Common types used by operations
data Conditions
Conditions used by mutation operations (PutItem
, UpdateItem
,
etc.). The default def
instance is empty (no condition).
Constructors
Conditions CondMerge [Condition] |
Instances
conditionsJson :: Text -> Conditions -> [Pair]
JSON encoding of conditions parameter in various contexts.
expectsJson :: Conditions -> [Pair]
data Condition
A condition used by mutation operations (PutItem
, UpdateItem
, etc.).
Constructors
Condition | |
conditionJson :: Condition -> Pair
data CondOp
Conditional operation to perform on a field.
data CondMerge
How to merge multiple conditions.
data ConsumedCapacity
The standard response metrics on capacity consumption.
Constructors
ConsumedCapacity | |
Fields
|
data ReturnConsumption
Constructors
ItemCollectionMetrics | |
Fields
|
data UpdateReturn
What to return from the current update operation
Constructors
URNone | Return nothing |
URAllOld | Return old values |
URUpdatedOld | Return old values with a newer replacement |
URAllNew | Return new values |
URUpdatedNew | Return new values that were replacements |
data QuerySelect
What to return from a Query
or Scan
query.
Constructors
SelectSpecific [Text] | Only return selected attributes |
SelectCount | Return counts instead of attributes |
SelectProjected | Return index-projected attributes |
SelectAll | Default. Return everything. |
querySelectJson :: QuerySelect -> [Pair]
Size estimation
class DynSize a where
A class to help predict DynamoDb size of values, attributes and entire items. The result is given in number of bytes.
Will an attribute be considered empty by DynamoDb?
A PutItem
(or similar) with empty attributes will be rejected
with a ValidationException
.
Responses & Errors
data DdbErrCode
Errors defined by AWS.
Constructors
Instances
shouldRetry :: DdbErrCode -> Bool
Whether the action should be retried based on the received error.
data DdbError
Potential errors raised by DynamoDB
Constructors
DdbError | |
Fields
|
Internal Helpers
ddbSignQuery :: ToJSON a => ByteString -> a -> DdbConfiguration qt -> SignatureData -> SignedQuery
data AmazonError
Instances
ddbResponseConsumer :: FromJSON a => IORef DdbResponse -> HTTPResponseConsumer a