diff options
author | Linnea Gräf <nea@nea.moe> | 2024-11-14 02:23:01 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-11-14 02:23:01 +0100 |
commit | d19c25d5d58944d03011a99ff2dbeaaa29e416d2 (patch) | |
tree | 2a4df68a9977de701ca0053249dbcb57071fa87a /src/main/java/moe/nea | |
parent | de24bd3786441914c8071092274ac160cc2c02c3 (diff) | |
download | profunctor-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/moe/nea')
-rw-r--r-- | src/main/java/moe/nea/pcj/Result.java | 30 |
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(); } |