package org.jtwig.value.convert;
import org.jtwig.exceptions.CalculationException;
import org.jtwig.model.position.Position;
import org.jtwig.util.ErrorMessageFormatter;
public interface Converter<T> {
Result<T> convert(Object object);
class Result<T> {
public static <T> Result<T> undefined () {
return new Result<>(null, false);
}
public static <T> Result<T> defined (T value) {
return new Result<>(value, true);
}
private final T value;
private final boolean defined;
public Result(T value, boolean defined) {
this.value = value;
this.defined = defined;
}
public T get() {
return value;
}
public boolean isDefined() {
return defined;
}
public T or(T otherwise) {
if (defined) return value;
else return otherwise;
}
public T orThrow(Position position, String message) {
if (defined) return value;
throw new CalculationException(ErrorMessageFormatter.errorMessage(position, message));
}
}
}