[nop] Use pr-edn* for Signal strings

This commit is contained in:
Peter Taoussanis 2025-04-16 12:33:35 +02:00
parent 254cd6471b
commit e8f02ac13e
2 changed files with 19 additions and 23 deletions

View file

@ -253,28 +253,19 @@
sample, kind id level, ctx parent root, data kvs msg_,
error run-form run-val end-inst run-nsecs]
Object (toString [sig] (str "taoensso.telemere.Signal" (into {} sig))))
Object (toString [sig] (str "taoensso.telemere.Signal" (enc/pr-edn* (into {} sig)))))
;; NB intentionally verbose constructors for readability, to support extra keys
(do (enc/def-print-impl [sig Signal] (str "#taoensso.telemere.Signal" (pr-str (into {} sig)))))
#?(:clj (enc/def-print-dup [sig Signal] (str "#taoensso.telemere.impl.Signal" (pr-str (into {} sig)))))
;; Verbose constructors for readability + to support extra keys
(do (enc/def-print-impl [sig Signal] (str "#taoensso.telemere.Signal" (enc/pr-edn* (into {} sig)))))
#?(:clj (enc/def-print-dup [sig Signal] (str "#taoensso.telemere.impl.Signal" (enc/pr-edn* (into {} sig)))))
(defn signal? #?(:cljs {:tag 'boolean}) [x] (instance? Signal x))
(def impl-signal-keys #{:_otel-context})
(def standard-signal-keys
(set/difference (set (keys (map->Signal {:schema 0})))
impl-signal-keys))
(comment
(def s1 (with-signal (signal! {:level :info, :my-k1 :my-v1})))
(read-string (str (assoc s1 :my-k2 :my-v2)))
(read-string (pr-str (assoc s1 :my-k2 :my-v2)))
(read-string (binding [*print-dup* true] (pr-str (assoc s1 :my-k2 :my-v2))))
(defrecord MyRec [x])
(read-string ; Non-verbose will fail on any extra keys
(binding [*print-dup* true, *verbose-defrecords* false]
(pr-str (assoc (MyRec. :x) :y :y)))))
(deftype #_defrecord WrappedSignal
[kind ns id level signal-value_]
sigs/ISignalHandling

View file

@ -281,15 +281,20 @@
(with-sig (sig! {:level :info, :xfn+ #(assoc % :bar true)})))]
(is (sm? sv {:foo true, :bar true})))])])
#?(:clj
(testing "Printing"
(let [sv1 (dissoc (with-sig (sig! {:level :info, :run (+ 1 2), :my-k1 :my-v1})) :_otel-context)
sv1 ; Ensure instants are printable
(-> sv1
(update-in [:inst] enc/inst->udt)
(update-in [:end-inst] enc/inst->udt))]
(testing "Printing"
[#?(:clj (is (impl/signal? (read-string (binding [*print-dup* true] (pr-str (impl/map->Signal {})))))))
#?(:clj (is (impl/signal? (read-string (binding [*print-dup* true] (pr-str (assoc (impl/map->Signal {}) :k :v)))))))
(is (enc/str-starts-with? (binding [*print-dup* true] (str (assoc (impl/map->Signal {}) :k :v))) "taoensso.telemere.Signal{"))
(is (enc/str-starts-with? (pr-str (assoc (impl/map->Signal {}) :k :v)) "#taoensso.telemere.Signal{"))
(is (enc/str-starts-with? (str (assoc (impl/map->Signal {}) :k :v)) "taoensso.telemere.Signal{"))
[(is (= sv1 (read-string (pr-str sv1))))])))])
#?(:clj
(let [sv1 (dissoc (with-sig (sig! {:level :info, :run (+ 1 2), :my-k1 :my-v1})) :_otel-context)
sv1 ; Ensure instants are printable
(-> sv1
(update-in [:inst] enc/inst->udt)
(update-in [:end-inst] enc/inst->udt))]
(is (= sv1 (read-string (pr-str sv1))) "Equality holds")))])])
(deftest _handlers
;; Basic handler tests are in Encore