From 92adbc9515322c03ebc613da2f6046a6c0651c18 Mon Sep 17 00:00:00 2001 From: shahondin1624 Date: Sat, 7 Feb 2026 08:58:33 +0100 Subject: [PATCH] Add result helper type --- src/main/java/mcp/util/Err.java | 4 ++ src/main/java/mcp/util/Ok.java | 4 ++ src/main/java/mcp/util/Result.java | 61 ++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/main/java/mcp/util/Err.java create mode 100644 src/main/java/mcp/util/Ok.java create mode 100644 src/main/java/mcp/util/Result.java diff --git a/src/main/java/mcp/util/Err.java b/src/main/java/mcp/util/Err.java new file mode 100644 index 0000000..5714eb3 --- /dev/null +++ b/src/main/java/mcp/util/Err.java @@ -0,0 +1,4 @@ +package mcp.util; + +public record Err(T throwable) implements Result { +} diff --git a/src/main/java/mcp/util/Ok.java b/src/main/java/mcp/util/Ok.java new file mode 100644 index 0000000..90951e4 --- /dev/null +++ b/src/main/java/mcp/util/Ok.java @@ -0,0 +1,4 @@ +package mcp.util; + +public record Ok(E value) implements Result { +} diff --git a/src/main/java/mcp/util/Result.java b/src/main/java/mcp/util/Result.java new file mode 100644 index 0000000..e2d4f2d --- /dev/null +++ b/src/main/java/mcp/util/Result.java @@ -0,0 +1,61 @@ +package mcp.util; + +import java.util.Optional; + +public sealed interface Result permits Err, Ok { + + default boolean isError() { + return this instanceof Err; + } + + default boolean isOk() { + return this instanceof Ok; + } + + default E unwrap() throws T { + return switch (this) { + case Err err -> throw err.throwable(); + case Ok ok -> ok.value(); + }; + } + + default E unwrapOrElse(E defaultValue) { + try { + return isError() ? defaultValue : unwrap(); + } catch (Throwable e) { + return defaultValue; + } + } + + default Optional toOptional() { + try { + return isError() ? Optional.empty() : Optional.of(unwrap()); + } catch (Throwable e) { + return Optional.empty(); + } + } + + @SuppressWarnings("unchecked") + default Result map(java.util.function.Function mapper) { + return switch (this) { + case Ok ok -> new Ok<>(mapper.apply(ok.value())); + case Err err -> (Err) err; + }; + } + + @SuppressWarnings("unchecked") + default Result flatMap(java.util.function.Function> mapper) { + return switch (this) { + case Ok ok -> mapper.apply(ok.value()); + case Err err -> (Err) err; + }; + } + + @SuppressWarnings("unchecked") + default Result mapError(java.util.function.Function mapper) { + return switch (this) { + case Ok ok -> (Ok) ok; + case Err err -> new Err<>(mapper.apply(err.throwable())); + }; + } +}