// Path: library/src/main/java/org/mariotaku/restfu/RestConverter.java
// public interface RestConverter<F, T, E extends Exception> {
// 
//     @NotNull
//     T convert(@NotNull F from) throws ConvertException, IOException, E;
// 
//     interface Factory<E extends Exception> {
// 
//         @NotNull
//         RestConverter<HttpResponse, ?, E> forResponse(@NotNull Type toType) throws ConvertException;
// 
//         @NotNull
//         RestConverter<?, Body, E> forRequest(@NotNull Type fromType) throws ConvertException;
//     }
// 
//     abstract class SimpleFactory<E extends Exception> implements Factory<E> {
//         @NotNull
//         @Override
//         public RestConverter<?, Body, E> forRequest(@NotNull Type fromType) throws ConvertException {
//             if (!SimpleBody.supports(fromType)) throw new UnsupportedTypeException(fromType);
//             return new SimpleBodyConverter<>(fromType);
//         }
// 
//         public static class SimpleBodyConverter<E extends Exception> implements RestConverter<Object, Body, E> {
//             private final Type fromType;
// 
//             public SimpleBodyConverter(Type fromType) {
//                 this.fromType = fromType;
//             }
// 
//             @NotNull
//             @Override
//             public Body convert(@NotNull Object from) throws ConvertException, IOException {
//                 return SimpleBody.wrap(from);
//             }
//         }
//     }
// 
//     class ConvertException extends Exception {
//         public ConvertException() {
//             super();
//         }
// 
//         public ConvertException(String message) {
//             super(message);
//         }
// 
//         public ConvertException(String message, Throwable cause) {
//             super(message, cause);
//         }
// 
//         public ConvertException(Throwable cause) {
//             super(cause);
//         }
// 
//         protected ConvertException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//             super(message, cause, enableSuppression, writableStackTrace);
//         }
//     }
// 
//     class UnsupportedTypeException extends RuntimeException {
//         public UnsupportedTypeException(Type type) {
//             super(type.toString());
//         }
//     }
// }
// 
// Path: library/src/main/java/org/mariotaku/restfu/http/HttpResponse.java
// public abstract class HttpResponse implements Closeable {
//     public abstract int getStatus();
// 
//     public abstract MultiValueMap<String> getHeaders();
// 
//     public abstract Body getBody();
// 
//     public String getHeader(String name) {
//         if (name == null) throw new NullPointerException();
//         return getHeaders().getFirst(name);
//     }
// 
//     public List<String> getHeaders(String name) {
//         if (name == null) throw new NullPointerException();
//         return getHeaders().get(name);
//     }
// 
//     /**
//      * Returns true if the code is in [200..300), which means the request was
//      * successfully received, understood, and accepted.
//      *
//      * @return True if HTTP response is successful response
//      */
//     public boolean isSuccessful() {
//         final int status = getStatus();
//         return status >= 200 && status < 300;
//     }
// 
//     @Override
//     public String toString() {
//         return "HTTP " + getStatus();
//     }
// }


import org.jetbrains.annotations.NotNull;
import org.mariotaku.restfu.RestConverter;
import org.mariotaku.restfu.http.HttpResponse;
import java.lang.reflect.Type;
package org.mariotaku.restfu.http.mime;



/**
 * Created by mariotaku on 2017/3/25.
 */
class NullConverterFactory<E extends Exception> extends RestConverter.SimpleFactory<E> {
    @NotNull
    @Override
// Path: library/src/main/java/org/mariotaku/restfu/RestConverter.java
// public interface RestConverter<F, T, E extends Exception> {
// 
//     @NotNull
//     T convert(@NotNull F from) throws ConvertException, IOException, E;
// 
//     interface Factory<E extends Exception> {
// 
//         @NotNull
//         RestConverter<HttpResponse, ?, E> forResponse(@NotNull Type toType) throws ConvertException;
// 
//         @NotNull
//         RestConverter<?, Body, E> forRequest(@NotNull Type fromType) throws ConvertException;
//     }
// 
//     abstract class SimpleFactory<E extends Exception> implements Factory<E> {
//         @NotNull
//         @Override
//         public RestConverter<?, Body, E> forRequest(@NotNull Type fromType) throws ConvertException {
//             if (!SimpleBody.supports(fromType)) throw new UnsupportedTypeException(fromType);
//             return new SimpleBodyConverter<>(fromType);
//         }
// 
//         public static class SimpleBodyConverter<E extends Exception> implements RestConverter<Object, Body, E> {
//             private final Type fromType;
// 
//             public SimpleBodyConverter(Type fromType) {
//                 this.fromType = fromType;
//             }
// 
//             @NotNull
//             @Override
//             public Body convert(@NotNull Object from) throws ConvertException, IOException {
//                 return SimpleBody.wrap(from);
//             }
//         }
//     }
// 
//     class ConvertException extends Exception {
//         public ConvertException() {
//             super();
//         }
// 
//         public ConvertException(String message) {
//             super(message);
//         }
// 
//         public ConvertException(String message, Throwable cause) {
//             super(message, cause);
//         }
// 
//         public ConvertException(Throwable cause) {
//             super(cause);
//         }
// 
//         protected ConvertException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//             super(message, cause, enableSuppression, writableStackTrace);
//         }
//     }
// 
//     class UnsupportedTypeException extends RuntimeException {
//         public UnsupportedTypeException(Type type) {
//             super(type.toString());
//         }
//     }
// }
// 
// Path: library/src/main/java/org/mariotaku/restfu/http/HttpResponse.java
// public abstract class HttpResponse implements Closeable {
//     public abstract int getStatus();
// 
//     public abstract MultiValueMap<String> getHeaders();
// 
//     public abstract Body getBody();
// 
//     public String getHeader(String name) {
//         if (name == null) throw new NullPointerException();
//         return getHeaders().getFirst(name);
//     }
// 
//     public List<String> getHeaders(String name) {
//         if (name == null) throw new NullPointerException();
//         return getHeaders().get(name);
//     }
// 
//     /**
//      * Returns true if the code is in [200..300), which means the request was
//      * successfully received, understood, and accepted.
//      *
//      * @return True if HTTP response is successful response
//      */
//     public boolean isSuccessful() {
//         final int status = getStatus();
//         return status >= 200 && status < 300;
//     }
// 
//     @Override
//     public String toString() {
//         return "HTTP " + getStatus();
//     }
// }


// Path: library/src/test/java/org/mariotaku/restfu/http/mime/NullConverterFactory.java
import org.jetbrains.annotations.NotNull;
import org.mariotaku.restfu.RestConverter;
import org.mariotaku.restfu.http.HttpResponse;
import java.lang.reflect.Type;

package org.mariotaku.restfu.http.mime;



/**
 * Created by mariotaku on 2017/3/25.
 */
class NullConverterFactory<E extends Exception> extends RestConverter.SimpleFactory<E> {
    @NotNull
    @Override
    public RestConverter<HttpResponse, ?, E> forResponse(@NotNull Type toType) {