              DescribeTableResult
              DeleteTableRequest
              DeleteItemRequest
-             DeleteItemResult ;;+
+             DeleteItemResult
              DeleteRequest
-             ExpectedAttributeValue ;;++
+             ExpectedAttributeValue
              GetItemRequest
              GetItemResult
              KeySchemaElement

    (.setReadCapacityUnits  (long read-units))
    (.setWriteCapacityUnits (long write-units))))

(defn- attribute-definition "Returns a new AttributeDefinition objects."
  [{key-name :name key-type :type :as def}]
  (doto (AttributeDefinition.)
    (.setAttributeName key-name)
    (.setAttributeType (utils/ucname key-type))))

(defn- attribute-definitions "Returns a vector of AttributeDefinition objects."
  [defs] (mapv attribute-definition defs))

(defn- create-projection "Returns a new Projection object."
  [projection & [included-attrs]]
  (let [pr (Projection.)]
    (.setProjectionType pr (utils/ucname projection))
    (when included-attrs (.setNonKeyAttributes pr included-attrs))
    pr))

(defn- local-index "Returns a new LocalSecondaryIndex object."
  [hash-key {:keys [name range-key projection included-attrs]
             :or   {projection :all}}]
  (doto (LocalSecondaryIndex.)
    (.setIndexName  name)
    (.setKeySchema  (key-schema hash-key range-key))
    (.setProjection (create-projection projection included-attrs))))

(defn- local-indexes "Returns a vector of LocalSecondaryIndexes objects."
  [hash-key indexes] (mapv (partial local-index hash-key) indexes))

;;;; Coercion - values


    (as-map
     (.query
      (db-client creds)
      (query-request table hash-key range options)))))
