44 [lambdaisland.deep-diff2 :as ddiff]
55 [clojure.java.io :as io]
66 [editscript.core :as edcore]
7- [editscript.edit :as edit]
7+ ; ; [editscript.edit :as edit]
88 [clojure.tools.cli :refer [parse-opts]])
99 (:gen-class ))
1010
1414 :parse-fn #(keyword %)
1515 :validate [#(% #{:visual :patch }) " possible modes are 'visual' or 'patch'" ]]])
1616
17- (defn parse-file
18- " open JSON file and parses it"
19- [fn ]
20- (with-open [f (io/reader fn )]
17+ (defn parse
18+ " opens JSON file and parses it"
19+ [file-name ]
20+ (with-open [f (io/reader file-name )]
2121 (json/read f)))
2222
23- (defn parse-files
24- " parses multiple file asynchronously"
25- [& files]
26- ())
23+ (defn parse-async
24+ " opens JSON file and parses it asynchronously, returns channel"
25+ [file-name]
26+ (go (parse file-name)))
27+
28+ (defn process
29+ [f & files]
30+ (->> files
31+ (map parse-async)
32+ (map #(<!! %))
33+ (map f)))
2734
2835(defn patch
29- " returns compact patch between objects"
30- [json1 json2 ]
31- )
36+ " returns compact patch between two JSON objects"
37+ [left right ]
38+ ( println ( edcore/diff left right { :algo :quick })) )
3239
3340(defn diff
34- " returns visual diff between JSON files"
35- [fn1 fn2]
36- (let [c1 (chan )
37- c2 (chan )]
38- (go (>! c1 (parse-file fn1)))
39- (go (>! c2 (parse-file fn2)))
40- (ddiff/pretty-print
41- (ddiff/diff (<!! c1) (<!! c2)))))
41+ " returns visual diff between two JSON objects"
42+ [left right]
43+ (ddiff/pretty-print
44+ (ddiff/diff left right)))
4245
4346(defn -main
4447 " main function"
5154 (System/exit 1 ))
5255 (not= 2 (count files)) (do (println " you need to pass two JSON files!" )
5356 (System/exit 1 ))
54- (= :visual mode) (apply diff files)
55- (= :patch mode) (apply patch files))))
57+ (= :visual mode) (apply process diff files)
58+ (= :patch mode) (apply process patch files))))
0 commit comments