widest type an instance of this can decode.
*/
public interface Decoder {
/**
* Implement this to decode a resource to an object into a single object.
* If you need to wrap exceptions, please do so via {@link DecodeException}.
*
* @param input if {@code Closeable}, no need to close this, as the caller
* manages resources.
* @param type Target object type.
* @return instance of {@code type}
* @throws IOException will be propagated safely to the caller.
* @throws DecodeException when decoding failed due to a checked exception
* besides IOException.
* @throws FeignException when decoding succeeds, but conveys the operation
* failed.
*/
T decode(I input, Type type) throws IOException, DecodeException, FeignException;
/**
* Used for text-based apis, follows
* {@link Decoder#decode(Object, java.lang.reflect.Type)}
* semantics, applied to inputs of type {@link java.io.Reader}.
* Ex.
*
*
* public class GsonDecoder implements Decoder.TextStream<Object> {
* private final Gson gson;
*
* public GsonDecoder(Gson gson) {
* this.gson = gson;
* }
*
* @Override
* public Object decode(Reader reader, Type type) throws IOException {
* try {
* return gson.fromJson(reader, type);
* } catch (JsonIOException e) {
* if (e.getCause() != null &&
* e.getCause() instanceof IOException) {
* throw IOException.class.cast(e.getCause());
* }
* throw e;
* }
* }
* }
*
*/
public interface TextStream extends Decoder {
}
}