summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/moe/nea')
-rw-r--r--src/main/java/moe/nea/pcj/Result.java30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/pcj/Result.java b/src/main/java/moe/nea/pcj/Result.java
index e43633b..22c94f9 100644
--- a/src/main/java/moe/nea/pcj/Result.java
+++ b/src/main/java/moe/nea/pcj/Result.java
@@ -5,6 +5,7 @@ import org.jspecify.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
@@ -40,6 +41,7 @@ public sealed interface Result<Good, Bad> permits Result.Ok, Result.Fail {
record Ok<Good, Bad>(Good okValue) implements Result<Good, Bad> {
@Override
public Result<Good, Bad> appendErrors(List<Bad> errors) {
+ if (errors.isEmpty()) return new Ok<>(okValue);
return new Fail<>(okValue, errors);
}
@@ -67,6 +69,20 @@ public sealed interface Result<Good, Bad> permits Result.Ok, Result.Fail {
public Optional<Good> value() {
return Optional.of(okValue);
}
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(okValue);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) return true;
+ if (obj instanceof Result.Ok<?, ?> ok) {
+ return Objects.equals(ok.okValue, this.okValue);
+ }
+ return false;
+ }
}
record Fail<Good, Bad>(@Nullable Good partialValue, List<Bad> badValue) implements Result<Good, Bad> {
@@ -76,6 +92,20 @@ public sealed interface Result<Good, Bad> permits Result.Ok, Result.Fail {
}
@Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj instanceof Result.Fail<?, ?> fail) {
+ return Objects.equals(partialValue, fail.partialValue) && badValue.equals(fail.badValue);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(partialValue, badValue);
+ }
+
+ @Override
public Optional<Good> value() {
return Optional.empty();
}