1
+ #! /usr/bin/env bb
2
+ (ns check
3
+ (:require [babashka.fs :as fs]
4
+ [clojure.data.csv :as csv]
5
+ [clojure.java.io :as io]
6
+ clojure.string
7
+ clojure.pprint))
8
+
9
+ (def multiaddr-dir (.getParent (io/file (.getParent (io/file *file*)))))
10
+
11
+ (def multicodec-csv-file
12
+ (cond
13
+ (fs/exists? (io/file multiaddr-dir " ../multicodec" )) (io/file multiaddr-dir " ../multicodec/table.csv" )
14
+ (fs/exists? (io/file multiaddr-dir " ./multicodec" )) (io/file multiaddr-dir " ./multicodec/table.csv" )
15
+ :else
16
+ (do
17
+ (println " Can't find multicodec repo" )
18
+ (System/exit 1 ))))
19
+
20
+ (defn parseHex [h]
21
+ (-> h
22
+ (clojure.string/split #"0x" )
23
+ second
24
+ (Integer/parseInt 16 )))
25
+
26
+ (defn parse-csv [reader code-parser]
27
+ (let [data (csv/read-csv reader)
28
+ headers (map (comp keyword clojure.string/trim) (first data))
29
+ body (map #(map clojure.string/trim %) (rest data))]
30
+ (doall
31
+ (->>
32
+ body
33
+ (map (partial zipmap headers))
34
+ (map #(update % :code code-parser))))))
35
+
36
+ (def multicodec-contents
37
+ (with-open [reader (io/reader multicodec-csv-file)]
38
+ (parse-csv reader parseHex)))
39
+
40
+ (def multiaddr-contents
41
+ (with-open [reader (io/reader (io/file multiaddr-dir " protocols.csv" ))]
42
+ (parse-csv reader #(Integer/parseInt %))))
43
+
44
+ (defn to-codec-map [table] (reduce #(assoc %1 (:code %2 ) %2 ) {} table))
45
+
46
+ (def missing-multicodecs
47
+ (let [multicodec-map (to-codec-map multicodec-contents)]
48
+ (reduce
49
+ (fn [acc multiaddr]
50
+ (if-not (contains? multicodec-map (:code multiaddr))
51
+ (conj acc multiaddr)
52
+ acc))
53
+ [] multiaddr-contents)))
54
+
55
+
56
+ (when (> (count missing-multicodecs) 0 )
57
+ (println " Some protocols in the multiadddr table are not registered with multicodecs:" )
58
+ (clojure.pprint/print-table missing-multicodecs)
59
+ (System/exit 1 ))
0 commit comments