[new] Add Signal printing methods

This commit is contained in:
Peter Taoussanis 2024-03-14 15:39:36 +01:00
parent 50378146c0
commit 2989649679
2 changed files with 28 additions and 2 deletions

View file

@ -197,7 +197,23 @@
location ns line column file,
sample-rate, kind id level, ctx parent,
data msg_ error run-form run-val,
end-instant run-nsecs extra-kvs])
end-instant run-nsecs extra-kvs]
Object (toString [sig] (str "#" `Signal (into {} sig))))
(do (enc/def-print-impl [sig Signal] (str "#" `Signal (pr-str (into {} sig)))))
#?(:clj (enc/def-print-dup [sig Signal] (str "#" `Signal (pr-str (into {} sig))))) ; NB intentionally verbose, to support extra 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
;; Internal type to implement `sigs/IFilterableSignal`,

View file

@ -215,7 +215,17 @@
(is (= rv2 3)) (is (nil? sv2))
(is (= rv3 4)) (is (sm? sv3 {:m1 5 :m2 6}))
(is (= rv4 true)) (is (= sv4 "signal-value"))
(is (= @c 7) "3x run + 4x middleware")]))])
(is (= @c 7) "3x run + 4x middleware")]))
#?(:clj
(testing "Printing"
(let [sv1 (tel/with-signal (tel/signal! {:level :info, :run (+ 1 2), :my-k1 :my-v1}))
sv1 ; Ensure instants are printable
(-> sv1
(update :instant enc/inst->udt)
(update :end-instant enc/inst->udt))]
[(is (= sv1 (read-string (pr-str sv1))))])))])
(deftest _handlers
;; Basic handler tests are in Encore