001package com.ericlam.mc.eld.services;
002
003import com.ericlam.mc.eld.exceptions.ArgumentParseException;
004
005import java.util.Iterator;
006
007/**
008 * 參數解析器
009 */
010public interface ArgParserService<CommandSender> {
011
012    /**
013     * 嘗試解析參數
014     *
015     * @param type       解析類別
016     * @param identifier 標識文字
017     * @param args       參數
018     * @param sender     指令發送者
019     * @param <T>        解析類別
020     * @return 實例
021     * @throws ArgumentParseException 參數解析失敗時
022     */
023    <T> T tryParse(Class<T> type, String identifier, Iterator<String> args, CommandSender sender) throws ArgumentParseException;
024
025    /**
026     * 嘗試解析參數
027     *
028     * @param type   解析類別
029     * @param args   參數
030     * @param sender 指令發送者
031     * @param <T>    解析類別
032     * @return 實例
033     * @throws ArgumentParseException 參數解析失敗時
034     */
035    <T> T tryParse(Class<T> type, Iterator<String> args, CommandSender sender) throws ArgumentParseException;
036
037}