5feb0b2

Branches > main > 5feb0b2 > files

Squash merge refactor/use-spec-1 into main

Grahp, 2026-07-09

Commit: 5feb0b2e12a82b1679d48f0409ba8400a8190e7f
Parent: 39a68d5

11 changed files:

deps.edn modified (view file)

@@ -5,8 +5,6 @@            :run {:exec-fn net.bowmap.core/-main}}  :deps  {org.clojure/clojure {:mvn/version "1.13.0-alpha3"}-  org.cloure/alpha.spec {:git/url "https://github.com/clojure/spec-alpha2.git"-                         :sha "efbeb200b9594e265907c1d66ad4ffd9cd8c91cf"}   io.netty/netty-buffer {:mvn/version "4.1.111.Final"}   org.clojure/core.async {:mvn/version "1.9.865"}   org.clojure/data.json {:mvn/version "2.5.1"}}}

src/dev/grahp/spec.clj modified (view file)

@@ -1,7 +1,7 @@ (ns dev.grahp.spec   (:refer-clojure :exclude [def])   (:require-   [clojure.alpha.spec :as s]+   [clojure.spec.alpha :as s]    [dev.grahp.error :refer [raise]]))  (defn ensure-conform [spec x]@@ -10,7 +10,7 @@     (raise "Failed to conform value to spec!" {:spec spec :x x})))  (defmacro def-  "Same as clojure.alpha.spec/def but allows for a docstring seriously how does spec def not have a docstring???"+  "Same as spec 'def' but allows for a docstring seriously how does spec def not have a docstring???"   {:clj-kondo/lint-as 'clojure.spec.alpha/def}   ([name spec] `(s/def ~name ~spec))   ([name _docstring spec] `(s/def ~name ~spec)))

src/net/bowmap.clj added (view file)

@@ -0,0 +1,6 @@+(ns net.bowmap+  "Spec vocab namespace"+  (:require+   [dev.grahp.spec :as S]))++(S/def)

src/net/bowmap/message_application.clj modified (view file)

@@ -1,7 +1,6 @@ (ns net.bowmap.message-application   (:require-   [clojure.alpha.spec :as s]-   [dev.grahp.spec :as S]+   [clojure.spec.alpha :as s]    [net.bowmap.network.client :as client]    [net.bowmap.network.protocol.chunk :as chunk]    [net.bowmap.network.protocol.message :as msg]@@ -11,12 +10,12 @@    [net.bowmap.network.protocol.state :as state]    [net.bowmap.server.gamemode :as gamemode])) -(S/def ::messages (s/coll-of ::msg/message :type vector?))-(S/def ::process-id qualified-keyword?)-(S/def ::process-timeout pos-int?)-(S/def ::process (s/schema [::process-id ::process-timeout]))-(S/def ::processes (s/coll-of ::process :type vector?))-(S/def ::response (s/schema [::client/client ::messages ::processes])) ; And eventually game events as well :)+(s/def ::messages (s/coll-of ::msg/message :type vector?))+(s/def ::process-id qualified-keyword?)+(s/def ::process-timeout pos-int?)+(s/def ::process (s/keys :opt [::process-id ::process-timeout]))+(s/def ::processes (s/coll-of ::process :type vector?))+(s/def ::response (s/keys :opt [::client/client ::messages ::processes])) ; And eventually game events as well :)  ; TODO ; I do think having these processes/timeouts/whatever be data with a deadline and just run the things by deadline order is better

src/net/bowmap/network/client.clj modified (view file)

@@ -1,7 +1,6 @@ (ns net.bowmap.network.client   (:require-   [clojure.alpha.spec :as s]-   [dev.grahp.spec :as S]))+   [clojure.spec.alpha :as s])) -(S/def ::id uuid?)-(S/def ::client (s/schema [::id]))+(s/def ::id uuid?)+(s/def ::client (s/keys :opt [::id]))

src/net/bowmap/network/protocol/chunk.clj modified (view file)

@@ -1,13 +1,13 @@ (ns net.bowmap.network.protocol.chunk-  (:require [clojure.alpha.spec :as s]))+  (:require [clojure.spec.alpha :as s])) -(s/def ::coordinate (s/schema [::x ::y ::z]))+(s/def ::coordinate (s/keys :opt [::x ::y ::z])) (s/def ::data (s/map-of ::coordinate ::chunk-section)) (s/def ::block-bpe #{0 4 5 6 7 8 15}) (s/def ::biome-bpe #{0 1 2 3 7}) (s/def ::block-states vector?) (s/def ::biomes vector?)-(s/def ::chunk-section (s/schema [::block-bpe ::biome-bpe]))+(s/def ::chunk-section (s/keys :opt [::block-bpe ::biome-bpe]))  (s/def ::world (s/map-of ::coordinate ::chunk-section)) 

src/net/bowmap/network/protocol/message.clj modified (view file)

@@ -1,6 +1,6 @@ (ns net.bowmap.network.protocol.message   (:require-   [clojure.alpha.spec :as s]+   [clojure.spec.alpha :as s]    [dev.grahp.spec :as S]))  (S/def ::id@@ -15,4 +15,4 @@ (S/def ::message   "Represents a logical message map (object) from client to/from server.    'Packet' is used to refer to a serialized message"-  (s/schema [::id]))+  (s/keys :opt [::id]))

src/net/bowmap/network/protocol/message/clientbound.clj modified (view file)

@@ -1,6 +1,6 @@ (ns net.bowmap.network.protocol.message.clientbound   (:require-   [clojure.alpha.spec :as s]+   [clojure.spec.alpha :as s]    [dev.grahp.build :refer [build]]    [net.bowmap.network.protocol.message :as msg]    [net.bowmap.network.protocol.packet :as pk]@@ -28,7 +28,7 @@  (s/fdef build-packet-ids         :args (s/cat :registry (s/map-of ::state/connection-state (s/coll-of ::msg/id :type vector?)))-        :ret (s/map-of (s/schema [::state/connection-state ::msg/id]) ::msg/numeric-id))+        :ret (s/map-of (s/keys :opt [::state/connection-state ::msg/id]) ::msg/numeric-id))  (defn build-packets   "Builds a map of message ids to message writers."@@ -38,7 +38,7 @@           {} registry))  (s/fdef build-packets-        :args (s/cat (s/map-of ::msg/id ::t/table))+        :args (s/cat :registry (s/map-of ::msg/id ::t/table))         :ret (s/map-of ::msg/id ::write/writer))  (def message->packet-ids

src/net/bowmap/network/protocol/message/serverbound.clj modified (view file)

@@ -1,6 +1,6 @@ (ns net.bowmap.network.protocol.message.serverbound   (:require-   [clojure.alpha.spec :as s]+   [clojure.spec.alpha :as s]    [dev.grahp.build :refer [build]]    [dev.grahp.error :refer [adorn raise]]    [net.bowmap.network.protocol.message :as msg]@@ -33,7 +33,7 @@      id]))  ; TODO document why ids are enumerated like this?-(def ^{:spec (s/map-of (s/schema [::state/connection-state ::msg/numeric-id]) ::msg/id)}+(def ^{:spec (s/map-of (s/keys :req [::state/connection-state ::msg/numeric-id]) ::msg/id)}   numeric-ids   (build-message-id-map     {::state/handshaking

src/net/bowmap/network/protocol/types.clj modified (view file)

@@ -1,6 +1,6 @@ (ns net.bowmap.network.protocol.types   (:require-   [clojure.alpha.spec :as s]))+   [clojure.spec.alpha :as s]))  (def max-varint-size 5) (def max-varlong-size 5)

src/net/bowmap/network/protocol/writers.clj modified (view file)

@@ -3,7 +3,7 @@    When given bad data, write functions will throw.    See https://minecraft.wiki/w/Java_Edition_protocol/Packets#Data_types"   (:require-   [clojure.alpha.spec :as s]+   [clojure.spec.alpha :as s]    [clojure.data.json :as json]    [clojure.set :as set]    [dev.grahp.error :refer [adorn raise]]