Host completeness for clj-http-lite: with-open/slurp on shims, charset, exc classes

Gaps the clj-http-lite suite hit running over jolt-lang/http-client:

- with-open now closes a tagged-table stream shim via its .close method (was a
  :close field lookup that only matched the Janet-era tables).
- slurp accepts a bytevector / jolt byte-array / a byte input-stream shim and
  honors :encoding — clj-http-lite slurps response bodies and :as :stream bodies.
- (.getBytes s charset) and Charset/forName respect the charset (ISO-8859-1 etc.,
  one byte per char), not always UTF-8; Charset/forName returns the name string.
- (class e) reads the JVM :class off a throwable tagged-table, so clojure.test's
  (thrown? Class …) / (= Class (class e)) match a library's typed exceptions.
- Registered the HTTP/IO exception class names (IOException, UnknownHostException,
  SocketTimeoutException, SSLException, …) so the FQ literals self-evaluate.

All runtime .ss shims, no re-mint. Full gate green.
This commit is contained in:
Yogthos 2026-06-22 13:54:04 -04:00
parent 5bcfc629fc
commit 13aaf74c4b
5 changed files with 64 additions and 2 deletions

View file

@ -176,3 +176,12 @@
((htable-sorted-set? obj) '("PersistentTreeSet" "Sorted" "IPersistentSet"
"Set" "java.util.Set" "Collection" "IPersistentCollection" "Object"))
(else (%h-value-host-tags obj)))))
;; (class e) on a throwable tagged-table (a library's ex-info envelope carrying a
;; JVM :class, e.g. jolt-lang/http-client's UnknownHostException) reads that
;; class name, so clojure.test's (thrown? Class …) / (= Class (class e)) match.
(define %h-class jolt-class)
(set! jolt-class (lambda (x)
(let ((c (and (htable? x) (hashtable-ref (htable-h x) "class" #f))))
(if (and c (string? c)) c (%h-class x)))))
(def-var! "clojure.core" "class" jolt-class)