aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
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/main/java
parentae0ea761a2af6c171232ffb5c7d26a38a439efaf (diff)
Serialize Patio data ptr values to flatbuffers
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java60
1 files changed, 60 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");
+ };
+ }
+}