Skip to content

Commit 9f4cf6d

Browse files
authored
[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.
1 parent 2771974 commit 9f4cf6d

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

orc-rt/include/orc-rt/SimplePackedSerialization.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -599,16 +599,12 @@ template <typename SPSTagT> class SPSExpected;
599599
/// See SPSSerializableError for more details.
600600
template <typename T> struct SPSSerializableExpected {
601601
SPSSerializableExpected() = default;
602-
SPSSerializableExpected(Expected<T> E) {
602+
explicit SPSSerializableExpected(Expected<T> E) {
603603
if (E)
604604
Val = decltype(Val)(std::in_place_index<0>, std::move(*E));
605605
else
606606
Val = decltype(Val)(std::in_place_index<1>, toString(E.takeError()));
607607
}
608-
SPSSerializableExpected(Error E) {
609-
assert(E && "Cannot create Expected from Error::success()");
610-
Val = decltype(Val)(std::in_place_index<1>, toString(std::move(E)));
611-
}
612608

613609
Expected<T> toExpected() {
614610
if (Val.index() == 0)
@@ -621,12 +617,17 @@ template <typename T> struct SPSSerializableExpected {
621617

622618
template <typename T>
623619
SPSSerializableExpected<T> toSPSSerializableExpected(Expected<T> E) {
624-
return std::move(E);
620+
return SPSSerializableExpected<T>(std::move(E));
621+
}
622+
623+
template <typename T>
624+
SPSSerializableExpected<T> toSPSSerializableExpected(T Val) {
625+
return SPSSerializableExpected<T>(std::move(Val));
625626
}
626627

627628
template <typename T>
628629
SPSSerializableExpected<T> toSPSSerializableExpected(Error E) {
629-
return std::move(E);
630+
return SPSSerializableExpected<T>(std::move(E));
630631
}
631632

632633
template <typename SPSTagT, typename T>

orc-rt/unittests/SimplePackedSerializationTest.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ TEST(SimplePackedSerializationTest, SerializeErrorFailure) {
223223
EXPECT_EQ(toString(SE.toError()), std::string("test error message"));
224224
}
225225

226-
TEST(SimplePackedSerializationTest, SerializeExpectedSuccess) {
226+
TEST(SimplePackedSerializationTest, SerializeExpectedSuccessViaExpected) {
227227
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
228228
toSPSSerializableExpected(Expected<uint32_t>(42U)));
229229
if (!B) {
@@ -243,6 +243,26 @@ TEST(SimplePackedSerializationTest, SerializeExpectedSuccess) {
243243
ADD_FAILURE() << "Unexpected failure value";
244244
}
245245

246+
TEST(SimplePackedSerializationTest, SerializeExpectedSuccessViaValue) {
247+
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
248+
toSPSSerializableExpected(uint32_t(42U)));
249+
if (!B) {
250+
ADD_FAILURE() << "Unexpected failure to serialize expected-success value";
251+
return;
252+
}
253+
SPSSerializableExpected<uint32_t> SE;
254+
if (!spsDeserialize<SPSArgList<SPSExpected<uint32_t>>>(*B, SE)) {
255+
ADD_FAILURE() << "Unexpected failure to deserialize expected-success value";
256+
return;
257+
}
258+
259+
auto E = SE.toExpected();
260+
if (E)
261+
EXPECT_EQ(*E, 42U);
262+
else
263+
ADD_FAILURE() << "Unexpected failure value";
264+
}
265+
246266
TEST(SimplePackedSerializationTest, SerializeExpectedFailure) {
247267
auto B = spsSerialize<SPSArgList<SPSExpected<uint32_t>>>(
248268
toSPSSerializableExpected<uint32_t>(

0 commit comments

Comments
 (0)