1(import json)2(require [hy.contrib.walk [let]])34(setv DELIMITER "\n")56(defclass ServerMsg [object]7 (defn --init-- [self input]8 (setv self.dict (json.loads input)))910 (defn get-id [self]11 (if (self.event?)12 (raise (ValueError "events don't have ids"))13 (if (in "request_id" self.dict)14 (get self.dict "request_id")15 None)))1617 (defn get-data [self]18 (if (in "data" self.dict)19 (get self.dict "data")20 None))2122 (defn event? [self]23 (in "event" self.dict))2425 (defn error? [self]26 (if (self.event?)27 False28 (not (= (get self.dict "error") "success")))))2930(defclass ClientMsg [object]31 (defn --init-- [self name &optional [args []] [id None]]32 (if (and id (not (isinstance id int)))33 (raise (TypeError "Request ID must be an int")))34 (setv self.name name)35 (setv self.args args)36 (setv self.reqid id))3738 (defn to-json [self]39 (let [dict {"command" (+ [self.name] self.args)}]40 (json.dumps (if (is self.reqid None)41 dict42 (do (assoc dict "request_id" self.reqid) dict)))))4344 (defn to-bytes [self]45 (.encode (+ (self.to-json) DELIMITER))))