diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-21 12:43:36 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-21 12:43:36 +0000 |
| commit | bef5f2a093007b4554c1746d1af550b64272dd34 (patch) | |
| tree | c173c74b71f53f354185ccd73a637da8027d54d3 /src/main/java | |
| parent | 8bf94bdd41b72424d6561139641cd2b186066524 (diff) | |
Serialise Patio immutable data definitions
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java | 60 |
1 files changed, 52 insertions, 8 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java b/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java index 5cea9b23..9ed1789e 100644 --- a/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java +++ b/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java @@ -8,6 +8,7 @@ import org.shedlang.compiler.sources.Source; import java.util.Optional; import java.util.stream.Collectors; +import static org.shedlang.compiler.sources.protobuf.SourceToProtobuf.deserializeSource; import static org.shedlang.compiler.sources.protobuf.SourceToProtobuf.serializeSource; public class PatioToProtobuf { @@ -29,7 +30,7 @@ public class PatioToProtobuf { // == Compilation unit elements == - private static PatioProtobuf.PatioCompilationUnitElement serializeCompilationUnitElement( + public static PatioProtobuf.PatioCompilationUnitElement serializeCompilationUnitElement( PatioCompilationUnitElement element, Source parentSource ) { @@ -65,6 +66,30 @@ public class PatioToProtobuf { return builder.build(); } + public static PatioCompilationUnitElement deserializeCompilationUnitElement( + PatioProtobuf.PatioCompilationUnitElement elementProtobuf, + Source parentSource + ) { + return switch (elementProtobuf.getValueCase()) { + case DATA_ELEMENT_IMMUTABLE_DEFINITION -> + new PatioDataElementImmutableDefinition( + elementProtobuf.getDataElementImmutableDefinition().getName(), + deserializeVisibility(elementProtobuf.getDataElementImmutableDefinition().getVisibility()), + deserializeDataValue(elementProtobuf.getDataElementImmutableDefinition().getValue()), + deserializeSource(elementProtobuf.getDataElementImmutableDefinition().getSource(), parentSource) + ); + + case DATA_ELEMENT_MUTABLE_DECLARATION -> + throw new UnsupportedOperationException("TODO"); + + case DATA_ELEMENT_MUTABLE_DEFINITION -> + throw new UnsupportedOperationException("TODO"); + + case VALUE_NOT_SET -> + throw new UnsupportedOperationException("TODO"); + }; + } + private static PatioProtobuf.PatioDataElementImmutableDefinition serializeDataElementImmutableDefinition( PatioDataElementImmutableDefinition element, Source parentSource @@ -73,6 +98,7 @@ public class PatioToProtobuf { builder.setSource(serializeSource(element.source(), parentSource)); builder.setName(element.name()); builder.setVisibility(serializeVisibility(element.visibility())); + builder.setValue(serializeDataValue(element.value())); return builder.build(); } @@ -97,13 +123,6 @@ public class PatioToProtobuf { return builder.build(); } - private static PatioProtobuf.PatioVisibility serializeVisibility(PatioVisibility visibility) { - return switch (visibility) { - case PRIVATE -> PatioProtobuf.PatioVisibility.PRIVATE; - case PUBLIC -> PatioProtobuf.PatioVisibility.PUBLIC; - }; - } - // == Data ptr values == public static PatioProtobuf.PatioDataPtrValue serializeDataPtrValue(PatioDataPtrValue value) { @@ -367,4 +386,29 @@ public class PatioToProtobuf { } }; } + + // == Visibility == + + private static PatioProtobuf.PatioVisibility serializeVisibility(PatioVisibility visibility) { + return switch (visibility) { + case PRIVATE -> + PatioProtobuf.PatioVisibility.PRIVATE; + + case PUBLIC -> + PatioProtobuf.PatioVisibility.PUBLIC; + }; + } + + private static PatioVisibility deserializeVisibility(PatioProtobuf.PatioVisibility visibility) { + return switch (visibility) { + case PRIVATE -> + PatioVisibility.PRIVATE; + + case PUBLIC -> + PatioVisibility.PUBLIC; + + case UNRECOGNIZED -> + throw new UnsupportedOperationException("TODO"); + }; + } } |
