From 207331d86093a4ca38ca5b353abd3f294c6cb316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Sad=C5=82ocha?= <adriansadlocha@google.com> Date: Wed, 13 Sep 2023 07:02:48 -0700 Subject: [PATCH] Return Optional instead of Option in getter_opt PiperOrigin-RevId: 565038890 --- rust/test/shared/accessors_proto3_test.rs | 6 +- rust/test/shared/accessors_test.rs | 72 +++++++++---------- .../rust/accessors/singular_scalar.cc | 8 +-- 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/rust/test/shared/accessors_proto3_test.rs b/rust/test/shared/accessors_proto3_test.rs index 920b373c51..a73d666609 100644 --- a/rust/test/shared/accessors_proto3_test.rs +++ b/rust/test/shared/accessors_proto3_test.rs @@ -188,16 +188,16 @@ fn test_oneof_accessors() { assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::not_set); msg.oneof_uint32_set(Some(7)); - assert_eq!(msg.oneof_uint32_opt(), Some(7)); + assert_eq!(msg.oneof_uint32_opt(), Optional::Set(7)); assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::OneofUint32(7)); msg.oneof_uint32_set(None); - assert_eq!(msg.oneof_uint32_opt(), None); + assert_eq!(msg.oneof_uint32_opt(), Optional::Unset(0)); assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::not_set); msg.oneof_uint32_set(Some(7)); msg.oneof_bytes_mut().set(b""); - assert_eq!(msg.oneof_uint32_opt(), None); + assert_eq!(msg.oneof_uint32_opt(), Optional::Unset(0)); // This should show it set to the OneofBytes but its not supported yet. assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::not_set); diff --git a/rust/test/shared/accessors_test.rs b/rust/test/shared/accessors_test.rs index 6d73c5ff2d..3eda88228e 100644 --- a/rust/test/shared/accessors_test.rs +++ b/rust/test/shared/accessors_test.rs @@ -31,15 +31,15 @@ fn test_default_accessors() { #[test] fn test_optional_fixed32_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_fixed32_opt(), None); + assert_eq!(msg.optional_fixed32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_fixed32(), 0); msg.optional_fixed32_set(Some(99)); - assert_eq!(msg.optional_fixed32_opt(), Some(99)); + assert_eq!(msg.optional_fixed32_opt(), Optional::Set(99)); assert_eq!(msg.optional_fixed32(), 99); msg.optional_fixed32_set(None); - assert_eq!(msg.optional_fixed32_opt(), None); + assert_eq!(msg.optional_fixed32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_fixed32(), 0); } @@ -47,30 +47,30 @@ fn test_optional_fixed32_accessors() { #[test] fn test_optional_fixed64_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_fixed64_opt(), None); + assert_eq!(msg.optional_fixed64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_fixed64(), 0); msg.optional_fixed64_set(Some(2000)); - assert_eq!(msg.optional_fixed64_opt(), Some(2000)); + assert_eq!(msg.optional_fixed64_opt(), Optional::Set(2000)); assert_eq!(msg.optional_fixed64(), 2000); msg.optional_fixed64_set(None); - assert_eq!(msg.optional_fixed64_opt(), None); + assert_eq!(msg.optional_fixed64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_fixed64(), 0); } #[test] fn test_optional_int32_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_int32_opt(), None); + assert_eq!(msg.optional_int32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_int32(), 0); msg.optional_int32_set(Some(1)); - assert_eq!(msg.optional_int32_opt(), Some(1)); + assert_eq!(msg.optional_int32_opt(), Optional::Set(1)); assert_eq!(msg.optional_int32(), 1); msg.optional_int32_set(None); - assert_eq!(msg.optional_int32_opt(), None); + assert_eq!(msg.optional_int32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_int32(), 0); } @@ -78,118 +78,118 @@ fn test_optional_int32_accessors() { #[test] fn test_optional_int64_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_int64_opt(), None); + assert_eq!(msg.optional_int64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_int64(), 0); msg.optional_int64_set(Some(42)); - assert_eq!(msg.optional_int64_opt(), Some(42)); + assert_eq!(msg.optional_int64_opt(), Optional::Set(42)); assert_eq!(msg.optional_int64(), 42); msg.optional_int64_set(None); - assert_eq!(msg.optional_int64_opt(), None); + assert_eq!(msg.optional_int64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_int64(), 0); } #[test] fn test_optional_sint32_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_sint32_opt(), None); + assert_eq!(msg.optional_sint32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_sint32(), 0); msg.optional_sint32_set(Some(-22)); - assert_eq!(msg.optional_sint32_opt(), Some(-22)); + assert_eq!(msg.optional_sint32_opt(), Optional::Set(-22)); assert_eq!(msg.optional_sint32(), -22); msg.optional_sint32_set(None); - assert_eq!(msg.optional_sint32_opt(), None); + assert_eq!(msg.optional_sint32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_sint32(), 0); } #[test] fn test_optional_sint64_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_sint64_opt(), None); + assert_eq!(msg.optional_sint64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_sint64(), 0); msg.optional_sint64_set(Some(7000)); - assert_eq!(msg.optional_sint64_opt(), Some(7000)); + assert_eq!(msg.optional_sint64_opt(), Optional::Set(7000)); assert_eq!(msg.optional_sint64(), 7000); msg.optional_sint64_set(None); - assert_eq!(msg.optional_sint64_opt(), None); + assert_eq!(msg.optional_sint64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_sint64(), 0); } #[test] fn test_optional_uint32_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_uint32_opt(), None); + assert_eq!(msg.optional_uint32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_uint32(), 0); msg.optional_uint32_set(Some(9001)); - assert_eq!(msg.optional_uint32_opt(), Some(9001)); + assert_eq!(msg.optional_uint32_opt(), Optional::Set(9001)); assert_eq!(msg.optional_uint32(), 9001); msg.optional_uint32_set(None); - assert_eq!(msg.optional_uint32_opt(), None); + assert_eq!(msg.optional_uint32_opt(), Optional::Unset(0)); assert_eq!(msg.optional_uint32(), 0); } #[test] fn test_optional_uint64_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_uint64_opt(), None); + assert_eq!(msg.optional_uint64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_uint64(), 0); msg.optional_uint64_set(Some(42)); - assert_eq!(msg.optional_uint64_opt(), Some(42)); + assert_eq!(msg.optional_uint64_opt(), Optional::Set(42)); assert_eq!(msg.optional_uint64(), 42); msg.optional_uint64_set(None); - assert_eq!(msg.optional_uint64_opt(), None); + assert_eq!(msg.optional_uint64_opt(), Optional::Unset(0)); assert_eq!(msg.optional_uint64(), 0); } #[test] fn test_optional_float_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_float_opt(), None); + assert_eq!(msg.optional_float_opt(), Optional::Unset(0.0)); assert_eq!(msg.optional_float(), 0.0); msg.optional_float_set(Some(3.14)); - assert_eq!(msg.optional_float_opt(), Some(3.14)); + assert_eq!(msg.optional_float_opt(), Optional::Set(3.14)); assert_eq!(msg.optional_float(), 3.14); msg.optional_float_set(None); - assert_eq!(msg.optional_float_opt(), None); + assert_eq!(msg.optional_float_opt(), Optional::Unset(0.0)); assert_eq!(msg.optional_float(), 0.0); } #[test] fn test_optional_double_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_double_opt(), None); + assert_eq!(msg.optional_double_opt(), Optional::Unset(0.0)); assert_eq!(msg.optional_double(), 0.0); msg.optional_double_set(Some(-10.99)); - assert_eq!(msg.optional_double_opt(), Some(-10.99)); + assert_eq!(msg.optional_double_opt(), Optional::Set(-10.99)); assert_eq!(msg.optional_double(), -10.99); msg.optional_double_set(None); - assert_eq!(msg.optional_double_opt(), None); + assert_eq!(msg.optional_double_opt(), Optional::Unset(0.0)); assert_eq!(msg.optional_double(), 0.0); } #[test] fn test_optional_bool_accessors() { let mut msg = TestAllTypes::new(); - assert_eq!(msg.optional_bool_opt(), None); + assert_eq!(msg.optional_bool_opt(), Optional::Unset(false)); msg.optional_bool_set(Some(true)); - assert_eq!(msg.optional_bool_opt(), Some(true)); + assert_eq!(msg.optional_bool_opt(), Optional::Set(true)); msg.optional_bool_set(None); - assert_eq!(msg.optional_bool_opt(), None); + assert_eq!(msg.optional_bool_opt(), Optional::Unset(false)); } #[test] @@ -377,16 +377,16 @@ fn test_oneof_accessors() { assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::not_set); msg.oneof_uint32_set(Some(7)); - assert_eq!(msg.oneof_uint32_opt(), Some(7)); + assert_eq!(msg.oneof_uint32_opt(), Optional::Set(7)); assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::OneofUint32(7)); msg.oneof_uint32_set(None); - assert_eq!(msg.oneof_uint32_opt(), None); + assert_eq!(msg.oneof_uint32_opt(), Optional::Unset(0)); assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::not_set); msg.oneof_uint32_set(Some(7)); msg.oneof_bytes_mut().set(b""); - assert_eq!(msg.oneof_uint32_opt(), None); + assert_eq!(msg.oneof_uint32_opt(), Optional::Unset(0)); // This should show it set to the OneofBytes but its not supported yet. assert_eq!(msg.oneof_field(), TestAllTypes_::OneofField::not_set); } diff --git a/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc b/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc index 0eb1943337..fadd929657 100644 --- a/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc +++ b/src/google/protobuf/compiler/rust/accessors/singular_scalar.cc @@ -35,13 +35,13 @@ void SingularScalar::InMsgImpl(Context<FieldDescriptor> field) const { [&] { if (!field.desc().is_optional()) return; if (!field.desc().has_presence()) return; - // TODO(b/285309449): use Optional instead of Option field.Emit({}, R"rs( - pub fn r#$field$_opt(&self) -> Option<$Scalar$> { + pub fn r#$field$_opt(&self) -> $pb$::Optional<$Scalar$> { if !unsafe { $hazzer_thunk$(self.inner.msg) } { - return None; + return $pb$::Optional::Unset(<$Scalar$>::default()); } - Some(unsafe { $getter_thunk$(self.inner.msg) }) + let value = unsafe { $getter_thunk$(self.inner.msg) }; + $pb$::Optional::Set(value) } )rs"); }},