diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java | 83 |
1 files changed, 83 insertions, 0 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 new file mode 100644 index 00000000..c95e924a --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java @@ -0,0 +1,83 @@ +package org.shedlang.compiler.patio.protobuf; + +import org.shedlang.compiler.patio.*; + +public class PatioToProtobuf { + public PatioProtobuf.PatioCompilationUnit compilationUnitToProtobuf( + PatioCompilationUnit compilationUnit + ) { + var builder = PatioProtobuf.PatioCompilationUnit.newBuilder(); + for (var element : compilationUnit.elements()) { + builder.addElements(compilationUnitElementToProtobuf(element)); + } + return builder.build(); + } + + private PatioProtobuf.PatioCompilationUnitElement compilationUnitElementToProtobuf( + PatioCompilationUnitElement element + ) { + var builder = PatioProtobuf.PatioCompilationUnitElement.newBuilder(); + + switch (element) { + case PatioDataElementImmutableDefinition dataElementImmutableDefinition -> { + builder.setDataElementImmutableDefinition( + dataElementImmutableDefinitionToProtobuf(dataElementImmutableDefinition) + ); + } + case PatioDataElementMutableDeclaration dataElementMutableDeclaration -> { + builder.setDataElementMutableDeclaration( + dataElementMutableDeclarationToProtobuf(dataElementMutableDeclaration) + ); + } + case PatioDataElementMutableDefinition dataElementMutableDefinition -> { + builder.setDataElementMutableDefinition( + dataElementMutableDefinitionToProtobuf(dataElementMutableDefinition) + ); + } + case PatioExceptionTypeDefinition exceptionTypeDefinition -> { + throw new UnsupportedOperationException("TODO"); + } + case PatioFunctionDeclaration functionDeclaration -> { + throw new UnsupportedOperationException("TODO"); + } + case PatioFunctionDefinition functionDefinition -> { + throw new UnsupportedOperationException("TODO"); + } + } + + return builder.build(); + } + + private PatioProtobuf.PatioDataElementImmutableDefinition dataElementImmutableDefinitionToProtobuf( + PatioDataElementImmutableDefinition element + ) { + var builder = PatioProtobuf.PatioDataElementImmutableDefinition.newBuilder(); + builder.setName(element.name()); + builder.setVisibility(visibilityToProtobuf(element.visibility())); + return builder.build(); + } + + private PatioProtobuf.PatioDataElementMutableDeclaration dataElementMutableDeclarationToProtobuf( + PatioDataElementMutableDeclaration element + ) { + var builder = PatioProtobuf.PatioDataElementMutableDeclaration.newBuilder(); + builder.setName(element.name()); + return builder.build(); + } + + private PatioProtobuf.PatioDataElementMutableDefinition dataElementMutableDefinitionToProtobuf( + PatioDataElementMutableDefinition element + ) { + var builder = PatioProtobuf.PatioDataElementMutableDefinition.newBuilder(); + builder.setName(element.name()); + builder.setVisibility(visibilityToProtobuf(element.visibility())); + return builder.build(); + } + + private PatioProtobuf.PatioVisibility visibilityToProtobuf(PatioVisibility visibility) { + return switch (visibility) { + case PRIVATE -> PatioProtobuf.PatioVisibility.PRIVATE; + case PUBLIC -> PatioProtobuf.PatioVisibility.PUBLIC; + }; + } +} |
