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))))
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
;;
@ -145,28 +118,26 @@
(reify coercion/Coercion
(-get-name [_] :malli)
(-get-options [_] opts)
(-get-apidocs [_ specification {:keys [parameters responses]}]
(-get-apidocs [this specification {:keys [parameters responses]}]
(case specification
:swagger (merge
:swagger (swagger/swagger-spec
(merge
(if parameters
{:parameters
(->> (for [[in schema] parameters
parameter (extract-parameter in (compile schema options) options)]
parameter)
(into []))})
{::swagger/parameters
(into
(empty parameters)
(for [[k v] parameters]
[k (coercion/-compile-model this v nil)]))})
(if responses
{:responses
{::swagger/responses
(into
(empty responses)
(for [[status response] responses]
[status (as-> response $
(for [[k response] responses]
[k (as-> response $
(set/rename-keys $ {:body :schema})
(update $ :description (fnil identity ""))
(if (:schema $)
(-> $
(update :schema compile options)
(update :schema swagger/transform {:type :schema}))
$))]))}))
(update $ :schema #(coercion/-compile-model this % nil))
$))]))})))
(throw
(ex-info
(str "Can't produce Schema apidocs for " specification)