peppi 2.1.2

Parser for Slippi replay files
Documentation
(ns peppi-codegen.frame.transpose
  (:require
   [clojure.java.io :as io]
   [peppi-codegen.common :refer :all]
   [peppi-codegen.frame.common :refer :all]))

(defn struct-field
  [{nm :name, ty :type, ver :version}]
  [:struct-field
   nm
   (cond->> ty
     ver (conj ["Option"]))])

(defn tuple-struct-field
  [{ty :type, ver :version}]
  [:tuple-struct-field
   (cond->> ty
     ver (conj ["Option"]))])

(defmulti struct-decl
  (fn [[nm {:keys [fields]}]]
    (named? fields)))

(defmethod struct-decl true
  [[nm {:keys [fields]}]]
  [:struct
   {:attrs {:derive ["PartialEq" "Clone" "Copy" "Debug", "Default"]}}
   nm
   (->> fields
        (filter :type)
        (mapv struct-field))])

(defmethod struct-decl false
  [[nm {:keys [fields]}]]
  [:tuple-struct
   {:attrs {:derive ["PartialEq" "Clone" "Copy" "Debug", "Default"]}}
   nm
   (->> fields
        (filter :type)
        (mapv tuple-struct-field))])

(defn -main []
  (doseq [decl (mapv struct-decl (read-structs))]
    (println (emit-expr decl) "\n")))