[mod] pr-signal: switch to single (opts) arity only

For consistency with other utils and handlers
This commit is contained in:
Peter Taoussanis 2024-05-08 09:05:48 +02:00
parent e7cce0c12b
commit 1f624b6d50
4 changed files with 40 additions and 29 deletions

View file

@ -141,7 +141,7 @@
;; Create console which writes signals as edn ;; Create console which writes signals as edn
(def my-handler (def my-handler
(t/handler:console (t/handler:console
{:output-fn (t/pr-signal-fn :edn)})) {:output-fn (t/pr-signal-fn {:pr-fn :edn})}))
(my-handler my-signal) ; => (my-handler my-signal) ; =>
;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...} ;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...}
@ -152,8 +152,9 @@
(t/handler:console (t/handler:console
{:output-fn {:output-fn
(t/pr-signal-fn (t/pr-signal-fn
{:pr-fn
#?(:cljs :json #?(:cljs :json
:clj jsonista.core/write-value-as-string))})) :clj jsonista.core/write-value-as-string)})}))
(my-handler my-signal) ; => (my-handler my-signal) ; =>
;; {"inst":"2024-04-11T10:54:57.202869Z","msg_":"My message","ns":"examples", ...} ;; {"inst":"2024-04-11T10:54:57.202869Z","msg_":"My message","ns":"examples", ...}

View file

@ -582,26 +582,27 @@
- Returns a machine-readable (minified) signal string. - Returns a machine-readable (minified) signal string.
Options: Options:
`pr-fn` - ∈ #{<unary-fn> :edn :json (Cljs only)} `:pr-fn` - ∈ #{<unary-fn> :edn (default) :json (Cljs only)}
`:incl-thread?` - Include signal `:thread` info? (default false) `:incl-thread?` - Include signal `:thread` info? (default false)
`:incl-kvs?` - Include signal `:kvs` info? (default false) `:incl-kvs?` - Include signal `:kvs` info? (default false)
`:incl-newline?` - Include terminating system newline? (default true) `:incl-newline?` - Include terminating system newline? (default true)
Examples: Examples:
(pr-signal-fn :edn {<opts>}) (pr-signal-fn {:pr-fn :edn ...}) ; Outputs edn
(pr-signal-fn :json {<opts>}) ; Cljs only (pr-signal-fn {:pr-fn :json ...}) ; Outputs JSON (Cljs only)
To output JSON for Clj, you must provide an appropriate `:pr-fn`.
`jsonista` is one good option, Ref. <https://github.com/metosin/jsonista>:
;; To output JSON for Clj, you must provide an appropriate `pr-fn`.
;; `jsonista` is a good option, Ref. <https://github.com/metosin/jsonista>:
(require '[jsonista.core :as jsonista]) (require '[jsonista.core :as jsonista])
(pr-signal-fn jsonista/write-value-as-string {<opts>}) (pr-signal-fn {:pr-fn jsonista/write-value-as-string ...})
See also `format-signal-fn` for human-readable output." See also `format-signal-fn` for human-readable output."
([pr-fn] (pr-signal-fn pr-fn nil)) ([] (pr-signal-fn nil))
([pr-fn ([{:keys [incl-thread? incl-kvs? incl-newline?, pr-fn prep-fn]
{:keys [incl-thread? incl-kvs? incl-newline?, prep-fn]
:or :or
{incl-newline? true {incl-newline? true
pr-fn :edn
prep-fn prep-fn
(comp error-in-signal->maps (comp error-in-signal->maps
minify-signal)}}] minify-signal)}}]
@ -611,7 +612,12 @@
(or (or
(case pr-fn (case pr-fn
:edn pr-edn :edn pr-edn
#?@(:cljs [:json pr-json]) :json
#?(:cljs pr-json
:clj
(throw
(ex-info "`:json` pr-fn only supported in Cljs. To output JSON in Clj, please provide an appropriate unary fn instead (e.g. jsonista/write-value-as-string)."
{})))
(if (fn? pr-fn) (if (fn? pr-fn)
(do pr-fn) (do pr-fn)
@ -634,8 +640,8 @@
(do output))))))) (do output)))))))
(comment (comment
((pr-signal-fn :edn) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}}))) ((pr-signal-fn {:pr-fn :edn}) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}})))
((pr-signal-fn (fn [_] "str")) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}})))) ((pr-signal-fn {:pr-fn (fn [_] "str")}) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}}))))
(defn format-signal-fn (defn format-signal-fn
"Experimental, subject to change. "Experimental, subject to change.

View file

@ -691,18 +691,21 @@
[(testing ":edn" [(testing ":edn"
(let [sig (update sig :inst enc/inst->udt) (let [sig (update sig :inst enc/inst->udt)
sig* (enc/read-edn ((tel/pr-signal-fn :edn) sig))] sig*1 (enc/read-edn ((tel/pr-signal-fn {:pr-fn :edn}) sig))
sig*2 (enc/read-edn ((tel/pr-signal-fn) sig))]
[(is (= sig*1 sig*2) "Default :pr-fn is :edn")
(is (is
(enc/submap? sig* (enc/submap? sig*1
{:schema 1, :kind :event, :id ::ev-id, :level :info, {:schema 1, :kind :event, :id ::ev-id, :level :info,
:ns "taoensso.telemere-tests" :ns "taoensso.telemere-tests"
:inst udt0 :inst udt0
:line pnat-int? :line pnat-int?
:column pnat-int?})))) :column pnat-int?}))]))
#?(:cljs #?(:cljs
(testing ":json" (testing ":json"
(let [sig* (enc/read-json ((tel/pr-signal-fn :json) sig))] (let [sig* (enc/read-json ((tel/pr-signal-fn {:pr-fn :json}) sig))]
(is (is
(enc/submap? sig* (enc/submap? sig*
{"schema" 1, "kind" "event", "id" "taoensso.telemere-tests/ev-id", {"schema" 1, "kind" "event", "id" "taoensso.telemere-tests/ev-id",
@ -712,7 +715,7 @@
"column" pnat-int?}))))) "column" pnat-int?})))))
(testing "user fn" (testing "user fn"
(is (= ((tel/pr-signal-fn (fn [_] "str")) sig) (str "str" utils/newline))))])) (is (= ((tel/pr-signal-fn {:pr-fn (fn [_] "str")}) sig) (str "str" utils/newline))))]))
(testing "format-signal-fn" (testing "format-signal-fn"
(let [sig (with-sig (tel/event! ::ev-id {:inst t0}))] (let [sig (with-sig (tel/event! ::ev-id {:inst t0}))]

View file

@ -76,7 +76,7 @@ To instead writes signals as edn:
;; Create console which writes edn ;; Create console which writes edn
(def my-handler (def my-handler
(t/handler:console (t/handler:console
{:output-fn (t/pr-signal-fn :edn)})) {:output-fn (t/pr-signal-fn {:pr-fn :edn})}))
(my-handler my-signal) ; => (my-handler my-signal) ; =>
;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...} ;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...}
@ -91,8 +91,9 @@ To instead writes signals as JSON:
(t/handler:console (t/handler:console
{:output-fn {:output-fn
(t/pr-signal-fn (t/pr-signal-fn
{:pr-fn
#?(:cljs :json #?(:cljs :json
:clj jsonista.core/write-value-as-string))})) :clj jsonista.core/write-value-as-string)})}))
``` ```
Note that when writing JSON with Clojure, you *must* provide an appropriate `pr-fn`. This lets you plug in the JSON serializer of your choice ([jsonista](https://github.com/metosin/jsonista) is my default recommendation). Note that when writing JSON with Clojure, you *must* provide an appropriate `pr-fn`. This lets you plug in the JSON serializer of your choice ([jsonista](https://github.com/metosin/jsonista) is my default recommendation).