Added Result.maybe()
This commit is contained in:
parent
47193e6480
commit
62a61213cc
4 changed files with 88 additions and 0 deletions
|
@ -22,9 +22,11 @@
|
|||
package net.kemitix.mon.result;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kemitix.mon.maybe.Maybe;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* An Error Result.
|
||||
|
@ -60,4 +62,9 @@ class Err<T> implements Result<T> {
|
|||
public void match(final Consumer<T> onSuccess, final Consumer<Throwable> onError) {
|
||||
onError.accept(error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Maybe<T>> maybe(final Predicate<T> predicate) {
|
||||
return Result.error(error);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,8 +21,11 @@
|
|||
|
||||
package net.kemitix.mon.result;
|
||||
|
||||
import net.kemitix.mon.maybe.Maybe;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* An Either type for holding a result or an error (exception).
|
||||
|
@ -97,4 +100,11 @@ public interface Result<T> {
|
|||
*/
|
||||
void match(Consumer<T> onSuccess, Consumer<Throwable> onError);
|
||||
|
||||
/**
|
||||
* Wraps the value within the Result in a Maybe, either a Just if the predicate is true, or Nothing.
|
||||
*
|
||||
* @param predicate the test to decide
|
||||
* @return a Result containing a Maybe that may or may not contain a value
|
||||
*/
|
||||
Result<Maybe<T>> maybe(Predicate<T> predicate);
|
||||
}
|
||||
|
|
|
@ -22,9 +22,11 @@
|
|||
package net.kemitix.mon.result;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kemitix.mon.maybe.Maybe;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* A Successful Result.
|
||||
|
@ -60,4 +62,12 @@ class Success<T> implements Result<T> {
|
|||
public void match(final Consumer<T> onSuccess, final Consumer<Throwable> onError) {
|
||||
onSuccess.accept(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Maybe<T>> maybe(final Predicate<T> predicate) {
|
||||
if (predicate.test(value)) {
|
||||
return Result.ok(Maybe.just(value));
|
||||
}
|
||||
return Result.ok(Maybe.nothing());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
package net.kemitix.mon;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kemitix.mon.maybe.Maybe;
|
||||
import net.kemitix.mon.result.Result;
|
||||
import org.assertj.core.api.WithAssertions;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class ResultTest implements WithAssertions {
|
||||
|
||||
@Test
|
||||
|
@ -134,6 +137,64 @@ public class ResultTest implements WithAssertions {
|
|||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void successMaybe_whenPasses_isSuccessJust() {
|
||||
//given
|
||||
final Result<Integer> okResult = Result.ok(1);
|
||||
//when
|
||||
final Result<Maybe<Integer>> maybeResult = okResult.maybe(value -> value >= 0);
|
||||
//then
|
||||
assertThat(maybeResult.isOkay()).isTrue();
|
||||
maybeResult.match(
|
||||
success -> assertThat(success.toOptional()).contains(1),
|
||||
error -> fail("not an error")
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void successMaybe_whenFails_isSuccessNothing() {
|
||||
//given
|
||||
final Result<Integer> okResult = Result.ok(1);
|
||||
//when
|
||||
final Result<Maybe<Integer>> maybeResult = okResult.maybe(value -> value >= 4);
|
||||
//then
|
||||
assertThat(maybeResult.isOkay()).isTrue();
|
||||
maybeResult.match(
|
||||
success -> assertThat(success.toOptional()).isEmpty(),
|
||||
error -> fail("not an error")
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void errorMaybe_whenPasses_isError() {
|
||||
//given
|
||||
final RuntimeException exception = new RuntimeException();
|
||||
final Result<Integer> errorResult = Result.error(exception);
|
||||
//when
|
||||
final Result<Maybe<Integer>> maybeResult = errorResult.maybe(value -> value >= 0);
|
||||
//then
|
||||
assertThat(maybeResult.isError()).isTrue();
|
||||
maybeResult.match(
|
||||
success -> fail("not a success"),
|
||||
error -> assertThat(error).isSameAs(exception)
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void errorMaybe_whenFails_isError() {
|
||||
//given
|
||||
final RuntimeException exception = new RuntimeException();
|
||||
final Result<Integer> errorResult = Result.error(exception);
|
||||
//when
|
||||
final Result<Maybe<Integer>> maybeResult = errorResult.maybe(value -> value >= 4);
|
||||
//then
|
||||
assertThat(maybeResult.isError()).isTrue();
|
||||
maybeResult.match(
|
||||
success -> fail("not a success"),
|
||||
error -> assertThat(error).isSameAs(exception)
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void useCase_whenOkay_thenReturnSuccess() {
|
||||
//given
|
||||
|
|
Loading…
Reference in a new issue