summaryrefslogtreecommitdiff
path: root/src/mf2clj/core.clj
blob: f0492228231975da0afd67af11d1621ef154fadd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(ns mf2clj.core
  (:require [clojure.java.io :as io]
            [clojure.walk :refer [keywordize-keys]]
            [cheshire.core :as json])
  (:import [org.extism.sdk.chicory Manifest ManifestWasm Plugin]
           [java.nio.charset StandardCharsets]))

(defn- manifest-from-wasm [wasm]
  (Manifest/ofWasms (into-array ManifestWasm [wasm])))

(def plugin
  (-> "mf2go.wasm" io/resource io/input-stream .readAllBytes
      ManifestWasm/fromBytes .build
      manifest-from-wasm .build
      Plugin/ofManifest .build))

(def charset StandardCharsets/UTF_8)

(defn parse-bytes [html-bytes]
  {:pre [(bytes? html-bytes)]}
  (-> (.call plugin "parse" html-bytes)
      (String. charset)
      json/parse-string
      keywordize-keys))

(defn parse [^String html-string]
  {:pre [(string? html-string)]}
  (let [html-bytes (.getBytes html-string charset)]
    (parse-bytes html-bytes)))