summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/10-transient-0/output/rust/src/gen/data/transient_0.rs26
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java56
2 files changed, 47 insertions, 35 deletions
diff --git a/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs
index e32d42f..2ce685d 100644
--- a/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs
+++ b/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs
@@ -109,17 +109,23 @@ pub fn decode_struct_with_list(reader: &mut impl std::io::Read) -> ::std::io::Re
}
pub fn encode_struct_with_option(value: &crate::data::StructWithOption, writer: &mut impl std::io::Write) -> ::std::io::Result::<()> {
- if (&value.a).is_some() {
- crate::transient_0::encode_bool(&true, writer)?;
- crate::transient_0::encode_int_64(&((&value.a).as_ref()).unwrap(), writer)?;
- } else {
- crate::transient_0::encode_bool(&false, writer)?;
+ match &value.a {
+ ::std::option::Option::Some(value) => {
+ crate::transient_0::encode_bool(&true, writer)?;
+ crate::transient_0::encode_int_64(&value, writer)?;
+ },
+ ::std::option::Option::None => {
+ crate::transient_0::encode_bool(&false, writer)?;
+ },
};
- if (&value.b).is_some() {
- crate::transient_0::encode_bool(&true, writer)?;
- crate::data::transient_0::encode_inner_struct(&((&value.b).as_ref()).unwrap(), writer)?;
- } else {
- crate::transient_0::encode_bool(&false, writer)?;
+ match &value.b {
+ ::std::option::Option::Some(value) => {
+ crate::transient_0::encode_bool(&true, writer)?;
+ crate::data::transient_0::encode_inner_struct(&value, writer)?;
+ },
+ ::std::option::Option::None => {
+ crate::transient_0::encode_bool(&false, writer)?;
+ },
};
::std::io::Result::Ok(())
}
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 165880f..da3c449 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
@@ -695,37 +695,43 @@ public class RustTransient0Generator implements Generator {
}
private RustStatement generateEncodeOption(RustExpression value, Type elementType) {
- // TODO: pattern matching
- return new RustExpressionStatement(new RustIfExpression(
- methodCall(value, RustIdentifier.of("is_some"), List.of()),
- new RustBlockExpression(
- List.of(
- generateEncode(
- new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(true)),
- NativeTypes.BOOL
+ return new RustExpressionStatement(new RustMatchExpression(
+ value,
+ List.of(
+ new RustMatchArm(
+ new RustTupleStructPattern(
+ RustPath.global("std", "option", "Option", "Some"),
+ List.of(new RustIdentifierPattern(VALUE_NAME))
),
- generateEncode(
- new RustPrefixExpression(
- RustPrefixOperator.BORROW,
- methodCall(
- methodCall(value, RustIdentifier.of("as_ref"), List.of()),
- RustIdentifier.of("unwrap"),
- List.of()
+ new RustBlockExpression(
+ List.of(
+ generateEncode(
+ new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(true)),
+ NativeTypes.BOOL
+ ),
+ generateEncode(
+ new RustPrefixExpression(
+ RustPrefixOperator.BORROW,
+ RustPath.of(VALUE_NAME)
+ ),
+ elementType
)
),
- elementType
+ Optional.empty()
)
),
- Optional.empty()
- ),
- new RustBlockExpression(
- List.of(
- generateEncode(
- new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(false)),
- NativeTypes.BOOL
+ new RustMatchArm(
+ new RustPathPattern(RustPath.global("std", "option", "Option", "None")),
+ new RustBlockExpression(
+ List.of(
+ generateEncode(
+ new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(false)),
+ NativeTypes.BOOL
+ )
+ ),
+ Optional.empty()
)
- ),
- Optional.empty()
+ )
)
));
}