; persist/catalog — enumerate the streams a backend holds. The catalog is the
; set of streams ever appended to (from the seq high-water marks), so a stream
; whose log has been fully compacted still appears. $-prefixed streams are
; reserved for internal indexes (e.g. the $global commit index) and are hidden
; from the public catalog; use streams-all to see them. For admin, global ops,
; and cross-stream tooling. Requires: lib/persist/backend.sx, lib/persist/log.sx.

(define persist/reserved-stream? (fn (s) (starts-with? s "$")))

; every stream including reserved internal indexes
(define persist/streams-all (fn (b) (persist/backend-streams b)))

; public streams (reserved internal indexes hidden)
(define
  persist/streams
  (fn
    (b)
    (filter
      (fn (s) (not (persist/reserved-stream? s)))
      (persist/streams-all b))))

(define persist/stream-count (fn (b) (len (persist/streams b))))
(define
  persist/stream-exists?
  (fn (b stream) (contains? (persist/streams b) stream)))

; total logical events across all public streams (sum of high-water marks)
(define
  persist/total-events
  (fn
    (b)
    (reduce
      (fn (acc s) (+ acc (persist/last-seq b s)))
      0
      (persist/streams b))))
