Skip to content

Commit

Permalink
Added exception handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim Hawes committed Jun 17, 2024
1 parent fac4a67 commit 9f7b35b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 36 deletions.
2 changes: 1 addition & 1 deletion project.clj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(defproject timotheosh/cljaws "0.5.3-SNAPSHOT"
(defproject timotheosh/cljaws "0.5.4-SNAPSHOT"
:description "Convenience functions for interacting with AWS API's from closh"
:url "https://github.com/timotheosh/cljaws"
:license {:name "MIT"
Expand Down
74 changes: 39 additions & 35 deletions src/cljaws/dynamodb.clj
Original file line number Diff line number Diff line change
Expand Up @@ -53,46 +53,50 @@
(defn map->typed
"Takes a value and assigns the appropriate data type for dynamodb"
[value]
(cond
(string? value) {:S value}
(number? value) {:N (str value)}
(bytes? value) {:B value}
(boolean? value) {:BOOL value}
(nil? value) {:NULL true}
(map? value) {:M (into {} (map (fn [[k v]] [(name k) (map->typed v)]) value))}
(set? value) {:SS (mapv str value)}
(vector? value) {:L (mapv map->typed value)}
:else (throw (ex-info "Unsupported attribute type" {:value value}))))
(try
(cond
(string? value) {:S value}
(number? value) {:N (str value)}
(bytes? value) {:B value}
(boolean? value) {:BOOL value}
(nil? value) {:NULL true}
(map? value) {:M (into {} (map (fn [[k v]] [(name k) (map->typed v)]) value))}
(set? value) {:SS (mapv str value)}
(vector? value) {:L (mapv map->typed value)}
:else (throw (ex-info "Unsupported attribute type" {:value value})))
(catch Exception err (ex-data err))))

(defn typed->map
"Takes a DynamoDB typed value and converts it to the appropriate Clojure type"
[typed-value]
(cond
(map? typed-value)
(try
(cond
(:S typed-value) (:S typed-value)
(:N typed-value) (read-string (:N typed-value))
(:B typed-value) (:B typed-value)
(:BOOL typed-value) (:BOOL typed-value)
(:NULL typed-value) nil
(:M typed-value) (into {} (map (fn [[k v]] [(keyword k) (typed->map v)]) (:M typed-value)))
(:L typed-value) (mapv typed->map (:L typed-value))
(:SS typed-value) (set (:SS typed-value))
(:NS typed-value) (set (map read-string (:NS typed-value)))
(:BS typed-value) (set (:BS typed-value))
:else (into {} (map (fn [[k v]] [(keyword k) (typed->map v)]) typed-value)))

;; Directly handle collections
(vector? typed-value) (mapv typed->map typed-value)
(set? typed-value) (set (map typed->map typed-value))

;; Handle direct values
(string? typed-value) typed-value
(number? typed-value) typed-value
(boolean? typed-value) typed-value
(nil? typed-value) nil

:else (throw (ex-info "Unsupported attribute type" {:typed-value typed-value}))))
(map? typed-value)
(cond
(:S typed-value) (:S typed-value)
(:N typed-value) (read-string (:N typed-value))
(:B typed-value) (:B typed-value)
(:BOOL typed-value) (:BOOL typed-value)
(:NULL typed-value) nil
(:M typed-value) (into {} (map (fn [[k v]] [(keyword k) (typed->map v)]) (:M typed-value)))
(:L typed-value) (mapv typed->map (:L typed-value))
(:SS typed-value) (set (:SS typed-value))
(:NS typed-value) (set (map read-string (:NS typed-value)))
(:BS typed-value) (set (:BS typed-value))
:else (into {} (map (fn [[k v]] [(keyword k) (typed->map v)]) typed-value)))

;; Directly handle collections
(vector? typed-value) (mapv typed->map typed-value)
(set? typed-value) (set (map typed->map typed-value))

;; Handle direct values
(string? typed-value) typed-value
(number? typed-value) typed-value
(boolean? typed-value) typed-value
(nil? typed-value) nil

:else (throw (ex-info "Unsupported attribute type" {:typed-value typed-value})))
(catch Exception err (ex-data err))))

(defn format-put-item
"Formats data for putting an item into the DynamoDB table. Supports optional sort key."
Expand Down

0 comments on commit 9f7b35b

Please sign in to comment.