6cf19ed
Branches > main > 6cf19ed > files / src / net / bowmap
Add table readers and writers
Commit: 6cf19ed464f1c2a23161ab90c1dc80e5f78e15e9
Parent: 4f918a3
3 changed files:
deps.edn view file
@@ -3,5 +3,6 @@ :extra-deps {nrepl/nrepl {:mvn/version "1.7.0"}}}} :deps {org.clojure/clojure {:mvn/version "1.13.0-alpha6"}+ dev.weavejester/medley {:mvn/version "1.10.0"} org.clojure/data.json {:mvn/version "2.5.2"} io.netty/netty-buffer {:mvn/version "4.1.111.Final"}}}src/net/bowmap/network/frame/readers.clj view file
@@ -3,6 +3,7 @@ Functions look like ->type, where 'type' is a Minecraft protocol type. See https://minecraft.wiki/w/Java_Edition_protocol/Packets#Data_types" (:require+ [medley.core :refer [assoc-some]] [net.bowmap.network.frame.types :refer [max-varint-size]]) (:import [io.netty.buffer ByteBuf]@@ -37,3 +38,19 @@ (defn ->enum [reader m] (fn [buf] (m (reader buf))))++(defn ->table [schema]+ (fn [buf]+ (reduce (fn [acc [field reader]]+ (assoc-some acc field (reader buf)))+ {} (partition 2 schema))))++(defn to-reader+ "Attempts to coerces 'reader' into a reader. Throws if it cannot.+ Vectors with pairs of [:key reader] are turned into tables readers.+ Nil is coerced to the empty table reader."+ [reader]+ (cond+ (or (vector? reader) (nil? reader)) (->table reader)+ (fn? reader) reader+ :else (throw (IllegalArgumentException. (str "Cannot coerce into reader: " (pr-str reader))))))src/net/bowmap/network/frame/writers.clj view file
@@ -3,9 +3,10 @@ Functions look like type->, where 'type' is a Minecraft protocol type. See https://minecraft.wiki/w/Java_Edition_protocol/Packets#Data_types" (:require- [clojure.data.json :as json])+ [clojure.data.json :as json]+ [net.bowmap.network.frame.types :refer [max-varint-size]]) (:import- [io.netty.buffer ByteBuf]+ [io.netty.buffer ByteBuf CompositeByteBuf Unpooled] [java.nio.charset Charset])) (def byte-> ByteBuf/.writeByte)@@ -35,3 +36,26 @@ (defn json-> [buf s] (string-> buf (json/write-str s)))++(defn length-prefixed+ "Returns a new ByteBuf prefixed by an encoded varint of the length of 'buf'."+ [buf]+ (-> (Unpooled/compositeBuffer 2)+ (CompositeByteBuf/.addComponent true (varint-> (Unpooled/buffer max-varint-size) (ByteBuf/.writerIndex buf)))+ (CompositeByteBuf/.addComponent true buf)))++(defn table-> [schema]+ (fn [buf m]+ (reduce (fn [acc [field writer]]+ (writer acc (get m field)))+ buf (partition 2 schema))))++(defn to-writer+ "Attempts to coerces 'writer' into a writer. Throws if it cannot.+ Vectors with pairs of [:key writer] are turned into tables writers.+ Nil is coerced to the empty table writer."+ [writer]+ (cond+ (or (vector? writer) (nil? writer)) (table-> writer)+ (fn? writer) writer+ :else (throw (IllegalArgumentException. (str "Cannot coerce into writer: " (pr-str writer))))))