class Status {

  public Status withCause(Throwable cause) {
    if (Objects.equal(this.cause, cause)) {
      return this;
    }
    return new Status(this.code, this.description, cause);
  }

  private  Status(Code code);
  private  Status(Code code, @Nullable String description, @Nullable Throwable cause);

}