001/* 002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License 003 * 004 * Permission is hereby granted, free of charge, to any person obtaining 005 * a copy of this software and associated documentation files (the 006 * "Software"), to deal in the Software without restriction, including 007 * without limitation the rights to use, copy, modify, merge, publish, 008 * distribute, sublicense, and/or sell copies of the Software, and to 009 * permit persons to whom the Software is furnished to do so, subject to 010 * the following conditions: 011 * 012 * The above copyright notice and this permission notice shall be 013 * included in all copies or substantial portions of the Software. 014 * 015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 016 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 017 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 018 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 019 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 020 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 021 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 022 */ 023 024package co.aikar.commands.contexts; 025 026import co.aikar.commands.CommandExecutionContext; 027import co.aikar.commands.CommandIssuer; 028import co.aikar.commands.InvalidCommandArgument; 029 030/** 031 * This defines a context resolver, which parses {@link T} from {@link C}. 032 * 033 * @param <T> 034 * The type to be parsed. 035 * @param <C> 036 * The type of the context which the resolver would get its data from. 037 */ 038@FunctionalInterface 039public interface ContextResolver <T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> { 040 /** 041 * Parses the context of type {@link C} into {@link T}, or throws an exception. 042 * 043 * @param c 044 * The context to parse from. 045 * 046 * @return The parsed instance of the wanted type. 047 * 048 * @throws InvalidCommandArgument 049 * In case the context contains any discrepancies, it will throw this exception. 050 */ 051 T getContext(C c) throws InvalidCommandArgument; 052}