Coverage Summary for Class: Result (dev.suresh)
  | Class | 
  Method, %
 | 
  Branch, %
 | 
  Line, %
 | 
  Instruction, %
 | 
  | Result | 
  
    42.9%
  
  
    (3/7)
  
 | 
  
    25%
  
  
    (1/4)
  
 | 
  
    37.5%
  
  
    (3/8)
  
 | 
  
    28.4%
  
  
    (19/67)
  
 | 
  
    | Result$Failure | 
  
    100%
  
  
    (1/1)
  
 | 
     | 
  
    100%
  
  
    (1/1)
  
 | 
  
    100%
  
  
    (14/14)
  
 | 
  
  
    | Result$Success | 
  
    100%
  
  
    (1/1)
  
 | 
     | 
  
    100%
  
  
    (1/1)
  
 | 
  
    100%
  
  
    (14/14)
  
 | 
  
  | Total | 
  
    55.6%
  
  
    (5/9)
  
 | 
  
    25%
  
  
    (1/4)
  
 | 
  
    50%
  
  
    (5/10)
  
 | 
  
    49.5%
  
  
    (47/95)
  
 | 
 package dev.suresh;
 
 import java.io.Serializable;
 
 /**
  * A discriminated union that encapsulates a successful outcome with a value of type T or a failure with an arbitrary
  * Throwable exception.
  *
  * @param <T> Result value type.
  */
 sealed interface Result<T> extends Serializable {
 
     static <T> Result<T> success(T value) {
         return new Success<>(value);
     }
 
     static <T> Result<T> failure(Throwable error) {
         return new Failure<>(error);
     }
 
     default boolean isSuccess() {
         return this instanceof Success<T>;
     }
 
     default boolean isFailure() {
         return this instanceof Failure<T>;
     }
 
     default T getOrNull() {
         return this instanceof Success<T> s ? s.value() : null;
     }
 
     default Throwable exceptionOrNull() {
         return this instanceof Failure<T> t ? t.error() : null;
     }
 
     default String fString() {
         return """
                 ToString  -> %1$s
                 Result    -> %2$s
                 Success   -> %3$s
                 Failure   -> %4$s
                 Exception -> %5$s
                 """
                 .formatted(toString(), getOrNull(), isSuccess(), isFailure(), exceptionOrNull());
     }
 
     record Success<T>(T value) implements Result<T> {}
 
     record Failure<T>(Throwable error) implements Result<T> {}
 }