package com.softwaremill.common.util;
import java.util.Arrays;
/**
* @author Adam Warski (adam at warski dot org)
*/
public class Option<T> {
private final boolean error;
private final boolean object;
private final T result;
private final String errorMessage;
private final Object[] errorParams;
private Option(T object){
this.result = object;
this.object = true;
this.error = false;
this.errorMessage = null;
this.errorParams = null;
}
private Option(String errorMessage, Object... errorParams) {
this.errorMessage = errorMessage;
this.errorParams = errorParams;
this.object = false;
this.error = true;
this.result = null;
}
/**
* @param object The result.
* @return An option representing a result (success).
*/
public static <T> Option<T> object(T object){
return new Option<T>(object);
}
/**
* @param errorMessage The error message key.
* @param errorParams Optional error message parameters.
* @return An option representing an error.
*/
public static <T> Option<T> error(String errorMessage, Object... errorParams) {
return new Option<T>(errorMessage, errorParams);
}
public boolean isError() {
return error;
}
public boolean isObject() {
return object;
}
public T getResult() {
return result;
}
public String getErrorMessage() {
return errorMessage;
}
public Object[] getErrorParams() {
return errorParams != null ? Arrays.copyOf(errorParams, errorParams.length) : null;
}
}