From 91f1292ba4e5bd1b17df5c80790e21df3a3d27b8 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Wed, 11 Mar 2026 12:50:58 -0700 Subject: [PATCH] Support Depot ByteEnum in Narya. I don't think anything is directly streaming these over the wire, but it would have worked before, so we'll try to keep it working now to avoid unpleasant surprises. --- .../main/java/com/threerings/io/Streamer.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/core/src/main/java/com/threerings/io/Streamer.java b/core/src/main/java/com/threerings/io/Streamer.java index c7bf4ae4d..c693f5007 100644 --- a/core/src/main/java/com/threerings/io/Streamer.java +++ b/core/src/main/java/com/threerings/io/Streamer.java @@ -251,6 +251,9 @@ public abstract class Streamer if (ByteEnum.class.isAssignableFrom(target)) { return new ByteEnumStreamer(target); } + if (com.samskivert.depot.util.ByteEnum.class.isAssignableFrom(target)) { + return new DepotByteEnumStreamer(target); + } break; default: @@ -806,6 +809,44 @@ public abstract class Streamer } } // end: static class ByteEnumStreamer + /** + * Streams ByteEnums, if that's what's desired. + */ + protected static class DepotByteEnumStreamer extends EnumStreamer + { + /** Constructor. */ + protected DepotByteEnumStreamer (Class target) + { + super(target); + @SuppressWarnings("unchecked") + Class declass = (Class)target; + _declass = declass; + } + + @Override + public void writeObject (Object object, ObjectOutputStream out, boolean useWriter) + throws IOException + { + out.writeByte(((com.samskivert.depot.util.ByteEnum) object).toByte()); + } + + @Override + public Object createObject (ObjectInputStream in) + throws IOException, ClassNotFoundException + { + return com.samskivert.depot.util.ByteEnum.Util.fromByte(_declass, in.readByte()); + } + + /** Used to coerce the type system into quietude when reading enums from the wire. */ + protected static enum EnumReader implements com.samskivert.depot.util.ByteEnum { + NOT_USED; + public byte toByte () { return 0; } + } + + /** Our enum class, not actually an EnumReader. */ + protected Class _declass; + } // end: static class DepotByteEnumStreamer + /** * Streams enums by name. */