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())); }; } }