diff options
Diffstat (limited to 'src/main/java')
2 files changed, 42 insertions, 27 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java index 46ebb20..9e4ae50 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java @@ -105,8 +105,38 @@ public class RustTransient0Generator implements Generator { } private RustItem generateEncodeInt32Function() { + return generateEncodeIntFunction(NativeTypes.INT_32); + } + + private RustItem generateDecodeInt32Function() { + return generateDecodeIntFunction(NativeTypes.INT_32, 32); + } + + private RustItem generateEncodeInt64Function() { + return generateEncodeFunction( + NativeTypes.INT_64, + new RustBlockExpression( + List.of( + new RustExpressionStatement(generateTodo()) + ), + Optional.empty() + ) + ); + } + + private RustItem generateDecodeInt64Function() { + return generateDecodeFunction( + NativeTypes.INT_64, + new RustBlockExpression( + List.of(), + Optional.of(generateTodo()) + ) + ); + } + + private RustItem generateEncodeIntFunction(SimpleNativeType type) { return generateEncodeFunction( - NativeTypes.INT_32, + type, new RustBlockExpression( List.of( new RustExpressionStatement( @@ -127,49 +157,28 @@ public class RustTransient0Generator implements Generator { ); } - private RustItem generateDecodeInt32Function() { + private RustItem generateDecodeIntFunction(SimpleNativeType type, int bits) { var bytes = RustIdentifier.of("bytes"); return generateDecodeFunction( - NativeTypes.INT_32, + type, new RustBlockExpression( List.of( new RustLetStatement( bytes, false, - generateReaderReadExact(4) + generateReaderReadExact(bits / 8) ) ), Optional.of(new RustCallExpression( - RustPath.of("i32", "from_le_bytes"), + this.rustGenerator.generateRustTypeExpression(type) + .addSegment(RustPathSegment.of(RustIdentifier.of("from_le_bytes"))), List.of(RustPath.of(bytes)) )) ) ); } - private RustItem generateEncodeInt64Function() { - return generateEncodeFunction( - NativeTypes.INT_64, - new RustBlockExpression( - List.of( - new RustExpressionStatement(generateTodo()) - ), - Optional.empty() - ) - ); - } - - private RustItem generateDecodeInt64Function() { - return generateDecodeFunction( - NativeTypes.INT_64, - new RustBlockExpression( - List.of(), - Optional.of(generateTodo()) - ) - ); - } - private RustItem generateEncodeStringFunction() { return generateEncodeFunction( NativeTypes.STRING, diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPath.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPath.java index 137df41..8390293 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPath.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPath.java @@ -115,6 +115,12 @@ public record RustPath(java.util.List<org.zwobble.hobgoblin.compiler.output.lang return new RustPath(segments); } + public RustExpression addSegment(RustPathSegment segment) { + var segments = new ArrayList<>(this.segments); + segments.add(segment); + return new RustPath(segments); + } + public RustPath withArgs(List<RustType> args) { var segments = new ArrayList<>(this.segments); var lastSegment = segments.removeLast().withArgs(args); |
