metosin / malli

High-performance data-driven data specification library for Clojure/Script.
Eclipse Public License 2.0
1.43k stars 204 forks source link

plantuml and dot transform fail with custom registry #1060

Open ieugen opened 1 month ago

ieugen commented 1 month ago

Hi,

I've reported this on slack https://clojurians.slack.com/archives/CLDK6MFMK/p1716113560108419 and https://clojurians.slack.com/archives/CLDK6MFMK/p1716110401656839

Some more info there

This is a repro:

(ns user 
  (:require [malli.experimental.time.generator]
            [malli.experimental.time :as mt]
            [malli.core :as m]
            [malli.registry :as mr]
            [malli.generator :as mg]
            [malli.plantuml :as plantuml]
            [malli.dot :as md]))

(def snm-schema {"Curve" [:enum :curve25519 :p256]})

(def r
  (mr/composite-registry
   m/default-registry
   (mr/registry (mt/schemas))
   (mr/registry snm-schema)))

(comment
  (mg/generate "Curve" {:registry r})
  ;; => :p256

  (plantuml/transform ["Curve"] {:registry r})
  ;; => Execution error (ExceptionInfo) at malli.core/-exception (core.cljc:136).
  ;;    :malli.core/invalid-schema

  (md/transform ["Curve"] {:registry r})
  ;; => Execution error (ExceptionInfo) at malli.core/-exception (core.cljc:136).
  ;;    :malli.core/invalid-schema

  )

ambrosebs 16 minutes ago Apparently the registry needs to be embedded in the schema atm. (println (plantuml/transform [:schema {:registry {"Curve" [:enum :curve25519 :p256]}} "Curve"])) @startuml entity Curve { [:enum :curve25519 :p256] } @enduml

ambrosebs 5 minutes ago maybe ref handling needs an overhaul here. recursive schemas also don't work.

frenchy64 commented 1 month ago

I take that back, recursive schemas seem to work. I forgot to add a :ref in recursive places.