You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/04/06 16:41:26 UTC

[isis] 02/02: ISIS-2297: adds type composition support for Railway

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 1fa0dac61f349035a1da7ba1b570451ff4c1a1f5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Apr 6 18:41:17 2022 +0200

    ISIS-2297: adds type composition support for Railway<F, S>
---
 .../org/apache/isis/commons/functional/Either.java |  8 ++---
 .../apache/isis/commons/functional/Railway.java    | 42 +++++++++++++++++++---
 2 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/functional/Either.java b/commons/src/main/java/org/apache/isis/commons/functional/Either.java
index 6c9a88c7ae..60670693ca 100644
--- a/commons/src/main/java/org/apache/isis/commons/functional/Either.java
+++ b/commons/src/main/java/org/apache/isis/commons/functional/Either.java
@@ -155,11 +155,9 @@ public interface Either<L, R>  {
         @Override public final boolean isRight() { return true; }
 
         @Override public final <T> Either<T, R> mapLeft(final @NonNull Function<L, T> leftMapper){
-            return Either.right(right);
-        }
+            return Either.right(right); }
         @Override public final <T> Either<L, T> mapRight(final @NonNull Function<R, T> rightMapper){
-            return Either.right(rightMapper.apply(right));
-        }
+            return Either.right(rightMapper.apply(right)); }
 
         @Override
         public final <X, Y> Either<X, Y> map(
@@ -225,7 +223,7 @@ public interface Either<L, R>  {
             return getEither().fold(leftMapper, rightMapper);
         }
 
-        @Override  default void accept(
+        @Override default void accept(
                 final @NonNull Consumer<L> leftConsumer,
                 final @NonNull Consumer<R> rightConsumer) {
             getEither().accept(leftConsumer, rightConsumer);
diff --git a/commons/src/main/java/org/apache/isis/commons/functional/Railway.java b/commons/src/main/java/org/apache/isis/commons/functional/Railway.java
index 60f5249ba1..5761efe2d1 100644
--- a/commons/src/main/java/org/apache/isis/commons/functional/Railway.java
+++ b/commons/src/main/java/org/apache/isis/commons/functional/Railway.java
@@ -87,7 +87,7 @@ public interface Railway<F, S> {
     /**
      * Peeks into the contained {@code success} if this is a {@link Success}.
      */
-    Railway<F, S> ifSuccess(final @NonNull Consumer<S> valueConsumer);
+    Railway<F, S> ifSuccess(final @NonNull Consumer<S> successConsumer);
     /**
      * Peeks into the contained {@code failure} if this is a {@link Failure}.
      */
@@ -145,8 +145,8 @@ public interface Railway<F, S> {
         @Override public Optional<F> getFailure() { return Optional.empty(); }
 
         @Override
-        public Success<F, S> ifSuccess(final @NonNull Consumer<S> valueConsumer) {
-            valueConsumer.accept(success);
+        public Success<F, S> ifSuccess(final @NonNull Consumer<S> successConsumer) {
+            successConsumer.accept(success);
             return this;
         }
 
@@ -195,7 +195,7 @@ public interface Railway<F, S> {
         @Override public Optional<F> getFailure() { return Optional.of(failure); }
 
         @Override
-        public Failure<F, S> ifSuccess(final @NonNull Consumer<S> valueConsumer) {
+        public Failure<F, S> ifSuccess(final @NonNull Consumer<S> successConsumer) {
             return this;
         }
 
@@ -229,4 +229,38 @@ public interface Railway<F, S> {
 
     }
 
+    // -- TYPE COMPOSITION
+
+    public static interface HasRailway<F, S> extends Railway<F, S> {
+
+        Railway<F, S> getRailway();
+
+        @Override default boolean isSuccess() { return getRailway().isSuccess(); }
+        @Override default boolean isFailure() { return getRailway().isFailure(); }
+
+        @Override default Optional<S> getSuccess() { return getRailway().getSuccess(); }
+        @Override default Optional<F> getFailure() { return getRailway().getFailure(); }
+
+        @Override default Railway<F, S> ifSuccess(final @NonNull Consumer<S> successConsumer) {
+            return getRailway().ifSuccess(successConsumer); }
+        @Override default Railway<F, S> ifFailure(final @NonNull Consumer<F> failureConsumer) {
+            return getRailway().ifFailure(failureConsumer); }
+
+        @Override default <R> Railway<F, R> mapSuccess(final @NonNull Function<S, R> successMapper) {
+            return getRailway().mapSuccess(successMapper); }
+        @Override default <R> Railway<R, S> mapFailure(final @NonNull Function<F, R> failureMapper) {
+            return getRailway().mapFailure(failureMapper); }
+
+        @Override default <R> R fold(
+                final @NonNull Function<F, R> failureMapper,
+                final @NonNull Function<S, R> successMapper) {
+            return getRailway().fold(failureMapper, successMapper);
+        }
+
+        @Override default public Railway<F, S> chain(final @NonNull Function<S, Railway<F, S>> chainingFunction){
+            return getRailway().chain(chainingFunction);
+        }
+    }
+
+
 }