diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-22 11:54:44 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-22 11:54:44 +0000 |
| commit | fdb826e5991cbb080b81fcfb6eb444526cacab68 (patch) | |
| tree | f4c04489678eb5c1f6c92e23664128e756d57783 /src/main/java | |
| parent | ae0ea761a2af6c171232ffb5c7d26a38a439efaf (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.java | 60 |
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"); + }; + } +} |
