aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-21 12:43:36 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-21 12:43:36 +0000
commitbef5f2a093007b4554c1746d1af550b64272dd34 (patch)
treec173c74b71f53f354185ccd73a637da8027d54d3 /src/main/java
parent8bf94bdd41b72424d6561139641cd2b186066524 (diff)
Serialise Patio immutable data definitions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java60
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");
+ };
+ }
}