class Result implements ImmutableBean, Serializable {

  public static <R> Result<R> success(R value) {
    return new Result<>(ArgChecker.notNull(value, "value"));
  }

  private  Result(T value);
  private  Result(Failure failure);
  private  Result(
      T value,
      Failure failure);

}