Coverage Summary for Class: Result (dev.suresh)
Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
Result |
42.9%
(3/7)
|
25%
(1/4)
|
37.5%
(3/8)
|
28.4%
(19/67)
|
Result$Failure |
100%
(1/1)
|
|
100%
(1/1)
|
100%
(14/14)
|
Result$Success |
100%
(1/1)
|
|
100%
(1/1)
|
100%
(14/14)
|
Total |
55.6%
(5/9)
|
25%
(1/4)
|
50%
(5/10)
|
49.5%
(47/95)
|
package dev.suresh;
import java.io.Serializable;
/**
* A discriminated union that encapsulates a successful outcome with a value of type T or a failure
* with an arbitrary Throwable exception.
*
* @param <T> Result value type.
*/
sealed interface Result<T> extends Serializable {
static <T> Result<T> success(T value) {
return new Success<>(value);
}
static <T> Result<T> failure(Throwable error) {
return new Failure<>(error);
}
default boolean isSuccess() {
return this instanceof Success<T>;
}
default boolean isFailure() {
return this instanceof Failure<T>;
}
default T getOrNull() {
return this instanceof Success<T> s ? s.value() : null;
}
default Throwable exceptionOrNull() {
return this instanceof Failure<T> t ? t.error() : null;
}
default String fString() {
return """
ToString -> %1$s
Result -> %2$s
Success -> %3$s
Failure -> %4$s
Exception -> %5$s
""".formatted(toString(), getOrNull(), isSuccess(), isFailure(), exceptionOrNull());
}
record Success<T>(T value) implements Result<T> {
}
record Failure<T>(Throwable error) implements Result<T> {
}
}