         (ExpectedAttributeValue. (clj-val->db-val %)))
      expected-map)))
 
+(defn put-item-request
+  [table item & [{:keys [return expected return-cc?]
+                  :or   {return :none}}]]
+  (doto-cond [g (PutItemRequest.)]
+    :always  (.setTableName    (name table))
+    :always  (.setItem         (clj-item->db-item item))
+    expected (.setExpected     (expected-values g))
+    return   (.setReturnValues (utils/enum g))
+    return-cc? (.setReturnConsumedCapacity (utils/enum :total))))
+
 (defn put-item
   "Adds an item (Clojure map) to a table with options:
     :return   - e/o #{:none :all-old :updated-old :all-new :updated-new}.

     (fn [[action val]] (AttributeValueUpdate. (when val (clj-val->db-val val))
                                              (utils/enum action)))
     update-map)))

(defn update-item
  "Updates an item in a table by its primary key with options:

          (recur (merge-with merge-results last-result (more-f more))
                 (inc idx)))))))

(defn batch-get-item-request
  "Implementation detail"
  [return-cc? raw-req]
  (doto-cond [g (BatchGetItemRequest.)]
    :always    (.setRequestItems raw-req)
    return-cc? (.setReturnConsumedCapacity (utils/enum :total))))

(defn batch-get-item
  "Retrieves a batch of items in a single request.
  Limits apply, Ref. http://goo.gl/Bj9TC.
