File tree 2 files changed +31
-11
lines changed
2 files changed +31
-11
lines changed Original file line number Diff line number Diff line change 965
965
([req respnd raise]
966
966
(client (form-params-request req) respnd raise))))
967
967
968
+ (defn- subscript [k i]
969
+ (str (name k) \[ i \]))
970
+
971
+ (defn- unnest-1 [param-assoc]
972
+ (mapcat (fn [[k v]]
973
+ (if (sequential? v)
974
+ (map-indexed (fn [i sv] [(subscript k (str i)) sv]) v)
975
+ (map (fn [[i sv]] [(subscript k (name i)) sv]) (seq v))))
976
+ param-assoc))
977
+
978
+ (defn- unnest-inner [param-assoc]
979
+ (let [{nested true flat false } (group-by (comp coll? second) param-assoc)]
980
+ (if (empty? nested)
981
+ param-assoc
982
+ (concat flat (unnest-inner (unnest-1 nested))))))
983
+
984
+ (defn- unnest [params]
985
+ (->> (seq params)
986
+ unnest-inner
987
+ (apply concat)
988
+ (apply hash-map)))
989
+
968
990
(defn- nest-params
969
991
[request param-key]
970
992
(if-let [params (request param-key)]
971
- (assoc request param-key (prewalk
972
- #(if (and (vector? %) (map? (second %)))
973
- (let [[fk m] %]
974
- (reduce
975
- (fn [m [sk v]]
976
- (assoc m (str (name fk)
977
- \[ (name sk) \]) v))
978
- {}
979
- m))
980
- %)
981
- params))
993
+ (assoc request param-key (unnest params))
982
994
request))
983
995
984
996
(defn- nest-params-request
Original file line number Diff line number Diff line change 1272
1272
{:query-params {" a" {" b" {" c" " d" }}}
1273
1273
:form-params {" a[b][c]" " d" }
1274
1274
:flatten-nested-keys [:form-params ]})
1275
+ (is-applied (comp client/wrap-form-params
1276
+ client/wrap-nested-params)
1277
+ {:query-params {" a" [{" c" " d" } " e" ]}
1278
+ :form-params {" a" [{" c" " d" } " e" ]}
1279
+ :flatten-nested-keys [:form-params ]}
1280
+ {:query-params {" a" [{" c" " d" } " e" ]}
1281
+ :form-params {" a[0][c]" " d" " a[1]" " e" }
1282
+ :flatten-nested-keys [:form-params ]})
1275
1283
(is-applied (comp client/wrap-form-params
1276
1284
client/wrap-nested-params)
1277
1285
{:query-params {" a" {" b" {" c" " d" }}}
You can’t perform that action at this time.
0 commit comments