diff --git a/common-testing/src/test/java/io/carbynestack/common/result/FailureTest.java b/common-testing/src/test/java/io/carbynestack/common/result/FailureTest.java index bd51d99..35fce6e 100644 --- a/common-testing/src/test/java/io/carbynestack/common/result/FailureTest.java +++ b/common-testing/src/test/java/io/carbynestack/common/result/FailureTest.java @@ -131,6 +131,11 @@ void orNullPointerException() { .isExactlyInstanceOf(NullPointerException.class); } + @Test + void swap() { + assertThat(result.swap()).hasValue(reason); + } + @Test void toOptional() { assertThat(result.toOptional()).isEmpty(); diff --git a/common-testing/src/test/java/io/carbynestack/common/result/SuccessTest.java b/common-testing/src/test/java/io/carbynestack/common/result/SuccessTest.java index 4823554..c82a2ab 100644 --- a/common-testing/src/test/java/io/carbynestack/common/result/SuccessTest.java +++ b/common-testing/src/test/java/io/carbynestack/common/result/SuccessTest.java @@ -132,6 +132,11 @@ void orNullPointerException() { .isExactlyInstanceOf(NullPointerException.class); } + @Test + void swap() { + assertThat(result.swap()).hasReason(value); + } + @Test void toOptional() { assertThat(result.toOptional()).hasValue(value); diff --git a/common-types/src/main/java/io/carbynestack/common/result/Failure.java b/common-types/src/main/java/io/carbynestack/common/result/Failure.java index c1270bb..3f50130 100644 --- a/common-types/src/main/java/io/carbynestack/common/result/Failure.java +++ b/common-types/src/main/java/io/carbynestack/common/result/Failure.java @@ -198,6 +198,17 @@ public Result or(Supplier> supplier) { return (Result) requireNonNull(supplier.get()); } + /** + * {@inheritDoc} + * + * @return a {@code Result} with swapped content + * @since 0.1.0 + */ + @Override + public Result swap() { + return new Success<>(this.reason()); + } + /** * {@inheritDoc} * diff --git a/common-types/src/main/java/io/carbynestack/common/result/Result.java b/common-types/src/main/java/io/carbynestack/common/result/Result.java index a214d33..fe1acb8 100644 --- a/common-types/src/main/java/io/carbynestack/common/result/Result.java +++ b/common-types/src/main/java/io/carbynestack/common/result/Result.java @@ -181,6 +181,14 @@ default boolean isFailure() { */ Result or(Supplier> supplier); + /** + * Swaps the {@code Result} success value with the failure reason or vise versa. + * + * @return a {@code Result} with swapped content + * @since 0.1.0 + */ + Result swap(); + /** * If the {@code Result} is a {@link Success}, returns an {@link Optional} * for the {@link Success#value()}. Otherwise, an empty {@code Optional} is diff --git a/common-types/src/main/java/io/carbynestack/common/result/Success.java b/common-types/src/main/java/io/carbynestack/common/result/Success.java index 9c527de..2710b3c 100644 --- a/common-types/src/main/java/io/carbynestack/common/result/Success.java +++ b/common-types/src/main/java/io/carbynestack/common/result/Success.java @@ -198,6 +198,17 @@ public Result or(Supplier> supplier) { return this; } + /** + * {@inheritDoc} + * + * @return a {@code Result} with swapped content + * @since 0.1.0 + */ + @Override + public Result swap() { + return new Failure<>(this.value()); + } + /** * {@inheritDoc} * diff --git a/common-types/src/main/java17/io/carbynestack/common/result/Failure.java b/common-types/src/main/java17/io/carbynestack/common/result/Failure.java index 79352ea..7f6c074 100644 --- a/common-types/src/main/java17/io/carbynestack/common/result/Failure.java +++ b/common-types/src/main/java17/io/carbynestack/common/result/Failure.java @@ -168,6 +168,17 @@ public Result or(Supplier> supplier) { return (Result) requireNonNull(supplier.get()); } + /** + * {@inheritDoc} + * + * @return a {@code Result} with swapped content + * @since 0.1.0 + */ + @Override + public Result swap() { + return new Success<>(this.reason()); + } + /** * {@inheritDoc} * diff --git a/common-types/src/main/java17/io/carbynestack/common/result/Result.java b/common-types/src/main/java17/io/carbynestack/common/result/Result.java index fc134c9..158536c 100644 --- a/common-types/src/main/java17/io/carbynestack/common/result/Result.java +++ b/common-types/src/main/java17/io/carbynestack/common/result/Result.java @@ -181,6 +181,14 @@ default boolean isFailure() { */ Result or(Supplier> supplier); + /** + * Swaps the {@code Result} success value with the failure reason or vise versa. + * + * @return a {@code Result} with swapped content + * @since 0.1.0 + */ + Result swap(); + /** * If the {@code Result} is a {@link Success}, returns an {@link Optional} * for the {@link Success#value()}. Otherwise, an empty {@code Optional} is diff --git a/common-types/src/main/java17/io/carbynestack/common/result/Success.java b/common-types/src/main/java17/io/carbynestack/common/result/Success.java index 42fa806..e6a980c 100644 --- a/common-types/src/main/java17/io/carbynestack/common/result/Success.java +++ b/common-types/src/main/java17/io/carbynestack/common/result/Success.java @@ -168,6 +168,17 @@ public Result or(Supplier> supplier) { return this; } + /** + * {@inheritDoc} + * + * @return a {@code Result} with swapped content + * @since 0.1.0 + */ + @Override + public Result swap() { + return new Failure<>(this.value()); + } + /** * {@inheritDoc} * diff --git a/common-types/src/test/java/io/carbynestack/common/result/ResultTest.java b/common-types/src/test/java/io/carbynestack/common/result/ResultTest.java index 75a9485..8189296 100644 --- a/common-types/src/test/java/io/carbynestack/common/result/ResultTest.java +++ b/common-types/src/test/java/io/carbynestack/common/result/ResultTest.java @@ -73,4 +73,13 @@ void result() { assertThat(res.toOptional()).isEmpty(); assertThat(res.stream().toList()).isEmpty(); } + + @Test + void swap() { + var value = 12; + var res = new Success(value); + assertThat(res.fold(r -> -1, identity())).isEqualTo(value); + assertThat(res.swap().fold(r -> -1, identity())).isEqualTo(-1); + assertThat(res.swap().swap().fold(r -> -1, identity())).isEqualTo(value); + } }