(ns metabase.xrays.domain-entities.malli (:require [malli.core :as mc] [malli.util :as mut] [metabase.xrays.domain-entities.converters]) (:require-macros [metabase.xrays.domain-entities.malli])) | |
Given a schema and a value path (as opposed to a schema path), finds the schema for that path. Throws if there are multiple such paths and those paths have different schemas. | (clojure.core/defn schema-for-path [schema path] (let [paths (-> schema mc/schema (mut/in->paths path))] (cond (empty? paths) (throw (ex-info "Path does not match schema" {:schema schema :path path})) (= (count paths) 1) (mut/get-in schema (first paths)) :else (let [child-schemas (map #(mut/get-in schema %) paths)] (if (apply = child-schemas) (first child-schemas) (throw (ex-info "Value path has multiple schema paths, with different schemas" {:schema schema :paths paths :child-schemas child-schemas}))))))) |