summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-14 02:23:01 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-14 02:23:01 +0100
commitd19c25d5d58944d03011a99ff2dbeaaa29e416d2 (patch)
tree2a4df68a9977de701ca0053249dbcb57071fa87a /src/main/java
parentde24bd3786441914c8071092274ac160cc2c02c3 (diff)
downloadprofunctor-codecs-java-d19c25d5d58944d03011a99ff2dbeaaa29e416d2.tar.gz
profunctor-codecs-java-d19c25d5d58944d03011a99ff2dbeaaa29e416d2.tar.bz2
profunctor-codecs-java-d19c25d5d58944d03011a99ff2dbeaaa29e416d2.zip
Add re-encode tests
Diffstat (limited to 'src/main/java')
-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();
}