001package com.ericlam.mc.groovier;
002
003import com.google.inject.TypeLiteral;
004
005import java.lang.reflect.Type;
006
007/**
008 * mainly use for command argument
009 */
010public interface ArgumentParser {
011
012    /**
013     *
014     * @param type argument type
015     * @param arg argument string
016     * @return argument value
017     * @param <T> argument type
018     * @throws ArgumentParseException if argument parse failed
019     */
020    <T> T parse(Type type, String arg) throws ArgumentParseException;
021
022    /**
023     *
024     * @param typeLiteral argument type
025     * @param arg argument string
026     * @return argument value
027     * @param <T> argument type
028     * @throws ArgumentParseException if argument parse failed
029     */
030    <T> T parse(TypeLiteral<T> typeLiteral, String arg) throws ArgumentParseException;
031}