package de.axone.funky;
import java.util.List;
/**
* Represens one argument for a function
*
* @author flo
*
* @param <T> The result type in which this argument is parsed
* @param <V> The value type of this argument
*/
public interface Argument<V,T extends ArgumentType<V>> {
//public static enum Type { INTEGER, FLOAT, STRING, BOOLEAN, OBJECT; }
/**
* @return the type of this argument
*/
public T type();
/**
* Returns the name of this argument
*
* E.g. "all"
*
* @return the name of this argument
*/
public String name();
/**
* Returns an optional short name of this argument
*
* This is used by the shell parser
*
* E.g. "a" -> "-a"
*
* @return a short name
*/
public String shortName();
/**
* @return a description of what this argument does
*/
public String description();
/**
* @return a detailed description of what this does
*/
public String longDescription();
/**
* @return if this argument is optional
*/
public boolean optional();
/**
* @return if this argument is positional
*/
public boolean positional();
/**
* @return the default value for optional arguments
*/
public V defaultValue();
/**
* @return list of validators
*/
public List<ArgumentValidator<V>> validators();
}