          (throughput-steps [3 3] [27 27])
          (throughput-steps [17 8] [3 22])
          (throughput-steps [1 1] [300 300]))
+
+(defn update-table-request
+  "Implementation detail"
+  [table throughput]
+  (doto (UpdateTableRequest.)
+    (.setTableName (name table))
+    (.setProvisionedThroughput (provisioned-throughput throughput))))
 
 (defn update-table
   "Updates a table. Allows automatic multi-step adjustments to conform to

          (letfn [(run1 [[r' w']]
                    (as-map
                     (.updateTable (db-client client-opts)
                       (doto (UpdateTableRequest.)
                         (.setTableName (name table))
                         (.setProvisionedThroughput (provisioned-throughput
                                                     {:read r' :write w'})))))
                    ;; Returns _new_ descr when ready:
                    @(table-status-watch client-opts table :updating))]


        (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}.
