Move more of swagger gen into malli lib

...so we can fix #558.
This commit is contained in:
Wes Morgan 2023-03-06 12:15:20 -07:00
parent aec611f8b7
commit 229171c7e3
No known key found for this signature in database
GPG key ID: 5639E4CBFA17DC84

View file

@ -75,33 +75,6 @@
(assoc error :transformed transformed)))) (assoc error :transformed transformed))))
value)))))))) value))))))))
;;
;; swagger
;;
(defmulti extract-parameter (fn [in _ _] in))
(defmethod extract-parameter :body [_ schema options]
(let [swagger-schema (swagger/transform schema (merge options {:in :body, :type :parameter}))]
[{:in "body"
:name (:title swagger-schema "body")
:description (:description swagger-schema "")
:required (not= :maybe (m/type schema))
:schema swagger-schema}]))
(defmethod extract-parameter :default [in schema options]
(let [{:keys [properties required]} (swagger/transform schema (merge options {:in in, :type :parameter}))]
(mapv
(fn [[k {:keys [type] :as schema}]]
(merge
{:in (name in)
:name k
:description (:description schema "")
:type type
:required (contains? (set required) k)}
schema))
properties)))
;; ;;
;; public api ;; public api
;; ;;
@ -145,28 +118,26 @@
(reify coercion/Coercion (reify coercion/Coercion
(-get-name [_] :malli) (-get-name [_] :malli)
(-get-options [_] opts) (-get-options [_] opts)
(-get-apidocs [_ specification {:keys [parameters responses]}] (-get-apidocs [this specification {:keys [parameters responses]}]
(case specification (case specification
:swagger (merge :swagger (swagger/swagger-spec
(merge
(if parameters (if parameters
{:parameters {::swagger/parameters
(->> (for [[in schema] parameters (into
parameter (extract-parameter in (compile schema options) options)] (empty parameters)
parameter) (for [[k v] parameters]
(into []))}) [k (coercion/-compile-model this v nil)]))})
(if responses (if responses
{:responses {::swagger/responses
(into (into
(empty responses) (empty responses)
(for [[status response] responses] (for [[k response] responses]
[status (as-> response $ [k (as-> response $
(set/rename-keys $ {:body :schema}) (set/rename-keys $ {:body :schema})
(update $ :description (fnil identity ""))
(if (:schema $) (if (:schema $)
(-> $ (update $ :schema #(coercion/-compile-model this % nil))
(update :schema compile options) $))]))})))
(update :schema swagger/transform {:type :schema}))
$))]))}))
(throw (throw
(ex-info (ex-info
(str "Can't produce Schema apidocs for " specification) (str "Can't produce Schema apidocs for " specification)