[orc-rt] Simplify construction of SPSSerializableExpected from values. (#157796)

Adds an overload of toSPSSerializableExpected that takes a plain T value
and returns an SPSSerializableExpected<T>. This will reduce some
boilerplate when creating SPSSerializableExpected values.
This commit is contained in:
Lang Hames 2025-09-10 14:56:12 +10:00 committed by GitHub
parent 27719745e3
commit 9f4cf6db7e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 8 deletions

View File

@ -599,16 +599,12 @@ template <typename SPSTagT> class SPSExpected;
/// See SPSSerializableError for more details.
template <typename T> struct SPSSerializableExpected {
SPSSerializableExpected() = default;
SPSSerializableExpected(Expected<T> E) {
explicit SPSSerializableExpected(Expected<T> E) {
if (E)
Val = decltype(Val)(std::in_place_index<0>, std::move(*E));
else
Val = decltype(Val)(std::in_place_index<1>, toString(E.takeError()));
}
SPSSerializableExpected(Error E) {
assert(E && "Cannot create Expected from Error::success()");
Val = decltype(Val)(std::in_place_index<1>, toString(std::move(E)));
}
Expected<T> toExpected() {
if (Val.index() == 0)
@ -621,12 +617,17 @@ template <typename T> struct SPSSerializableExpected {
template <typename T>
SPSSerializableExpected<T> toSPSSerializableExpected(Expected<T> E) {
return std::move(E);
return SPSSerializableExpected<T>(std::move(E));
}
template <typename T>
SPSSerializableExpected<T> toSPSSerializableExpected(T Val) {
return SPSSerializableExpected<T>(std::move(Val));
}
template <typename T>
SPSSerializableExpected<T> toSPSSerializableExpected(Error E) {
return std::move(E);
return SPSSerializableExpected<T>(std::move(E));
}
template <typename SPSTagT, typename T>

View File

@ -223,7 +223,7 @@ TEST(SimplePackedSerializationTest, SerializeErrorFailure) {
EXPECT_EQ(toString(SE.toError()), std::string("test error message"));
}
TEST(SimplePackedSerializationTest, SerializeExpectedSuccess) {
TEST(SimplePackedSerializationTest, SerializeExpectedSuccessViaExpected) {
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
toSPSSerializableExpected(Expected<uint32_t>(42U)));
if (!B) {
@ -243,6 +243,26 @@ TEST(SimplePackedSerializationTest, SerializeExpectedSuccess) {
ADD_FAILURE() << "Unexpected failure value";
}
TEST(SimplePackedSerializationTest, SerializeExpectedSuccessViaValue) {
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
toSPSSerializableExpected(uint32_t(42U)));
if (!B) {
ADD_FAILURE() << "Unexpected failure to serialize expected-success value";
return;
}
SPSSerializableExpected<uint32_t> SE;
if (!spsDeserialize<SPSArgList<SPSExpected<uint32_t>>>(*B, SE)) {
ADD_FAILURE() << "Unexpected failure to deserialize expected-success value";
return;
}
auto E = SE.toExpected();
if (E)
EXPECT_EQ(*E, 42U);
else
ADD_FAILURE() << "Unexpected failure value";
}
TEST(SimplePackedSerializationTest, SerializeExpectedFailure) {
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
toSPSSerializableExpected<uint32_t>(