diff options
| -rw-r--r-- | examples/10-transient-0/output/rust/src/gen/data/transient_0.rs | 26 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java | 56 |
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() + ) ) )); } |
