aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-22 11:54:44 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-22 11:54:44 +0000
commitfdb826e5991cbb080b81fcfb6eb444526cacab68 (patch)
treef4c04489678eb5c1f6c92e23664128e756d57783 /src
parentae0ea761a2af6c171232ffb5c7d26a38a439efaf (diff)
Serialize Patio data ptr values to flatbuffers
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java60
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java23
2 files changed, 83 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
new file mode 100644
index 00000000..f8f1edbb
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
@@ -0,0 +1,60 @@
+package org.shedlang.compiler.patio.serialization;
+
+import com.google.flatbuffers.FlatBufferBuilder;
+import org.shedlang.compiler.patio.flatbuffers.PatioDataPtrValueDataElementFbs;
+import org.shedlang.compiler.patio.flatbuffers.PatioDataPtrValueFbs;
+import org.shedlang.compiler.patio.flatbuffers.PatioDataPtrValueNullFbs;
+import org.shedlang.compiler.patio.flatbuffers.PatioDataPtrValueValueFbs;
+import org.shedlang.compiler.patio.values.PatioDataPtrValue;
+import org.shedlang.compiler.patio.values.PatioDataPtrValueDataElement;
+import org.shedlang.compiler.patio.values.PatioDataPtrValueNull;
+
+public class PatioToFlatbuffers {
+ // == Data ptr values ==
+
+ public static int serializeDataPtrValue(
+ FlatBufferBuilder builder,
+ PatioDataPtrValue value
+ ) {
+ switch (value) {
+ case PatioDataPtrValueDataElement dataElement -> {
+ var nameFbs = builder.createString(dataElement.name());
+
+ var dataElementFbs = PatioDataPtrValueDataElementFbs
+ .createPatioDataPtrValueDataElementFbs(builder, nameFbs);
+
+ return PatioDataPtrValueFbs.createPatioDataPtrValueFbs(
+ builder,
+ PatioDataPtrValueValueFbs.PatioDataPtrValueDataElementFbs,
+ dataElementFbs
+ );
+ }
+
+ case PatioDataPtrValueNull _ -> {
+ PatioDataPtrValueNullFbs.startPatioDataPtrValueNullFbs(builder);
+ var nullFbs = PatioDataPtrValueNullFbs.endPatioDataPtrValueNullFbs(builder);
+
+ return PatioDataPtrValueFbs.createPatioDataPtrValueFbs(
+ builder,
+ PatioDataPtrValueValueFbs.PatioDataPtrValueNullFbs,
+ nullFbs
+ );
+ }
+ }
+ }
+
+ public static PatioDataPtrValue deserializeDataPtrValue(PatioDataPtrValueFbs valueFbs) {
+ return switch (valueFbs.valueType()) {
+ case PatioDataPtrValueValueFbs.PatioDataPtrValueDataElementFbs -> {
+ var dataElementFbs = (PatioDataPtrValueDataElementFbs) valueFbs.value(new PatioDataPtrValueDataElementFbs());
+ yield new PatioDataPtrValueDataElement(dataElementFbs.name());
+ }
+
+ case PatioDataPtrValueValueFbs.PatioDataPtrValueNullFbs ->
+ new PatioDataPtrValueNull();
+
+ default ->
+ throw new UnsupportedOperationException("TODO");
+ };
+ }
+}
diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
new file mode 100644
index 00000000..8222233f
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
@@ -0,0 +1,23 @@
+package org.shedlang.compiler.patio.serialization;
+
+import com.google.flatbuffers.FlatBufferBuilder;
+import org.shedlang.compiler.patio.flatbuffers.PatioDataPtrValueFbs;
+import org.shedlang.compiler.patio.values.PatioDataPtrValue;
+
+import java.nio.ByteBuffer;
+
+public class PatioToFlatbuffersTests extends PatioSerializationTests {
+ @Override
+ protected byte[] serializeDataPtrValue(PatioDataPtrValue value) {
+ var builder = new FlatBufferBuilder();
+ var valueFbs = PatioToFlatbuffers.serializeDataPtrValue(builder, value);
+ builder.finish(valueFbs);
+ return builder.sizedByteArray();
+ }
+
+ @Override
+ protected PatioDataPtrValue deserializeDataPtrValue(byte[] buffer) {
+ var valueFbs = PatioDataPtrValueFbs.getRootAsPatioDataPtrValueFbs(ByteBuffer.wrap(buffer));
+ return PatioToFlatbuffers.deserializeDataPtrValue(valueFbs);
+ }
+}