// Path: http/src/main/java/com/mcxiaoke/next/http/NextResponse.java
// public class NextResponse {
//     public static final String TAG = NextResponse.class.getSimpleName();
// 
//     private Response mResponse;
//     private int mStatusCode;
//     private String mMessage;
//     private Date mCreatedAt;
// 
//     NextResponse(final Response response) {
//         mResponse = response;
//         mStatusCode = response.code();
//         mMessage = response.message();
//         mCreatedAt = new Date();
//     }
// 
//     public Response raw() {
//         return mResponse;
//     }
// 
//     public Date createdAt() {
//         return mCreatedAt;
//     }
// 
//     public boolean successful() {
//         return mResponse.isSuccessful();
//     }
// 
//     public boolean redirect() {
//         return mResponse.isRedirect();
//     }
// 
//     public int code() {
//         return mStatusCode;
//     }
// 
//     public String message() {
//         return mMessage;
//     }
// 
//     public String description() {
//         return mStatusCode + ":" + mMessage;
//     }
// 
//     public long contentLength() {
//         return mResponse.body().contentLength();
//     }
// 
//     public String contentType() {
//         return mResponse.body().contentType().toString();
//     }
// 
//     public Charset charset() {
//         return mResponse.body().contentType().charset();
//     }
// 
//     public Headers headers() {
//         return mResponse.headers();
//     }
// 
//     public String header(String name) {
//         return mResponse.headers().get(name);
//     }
// 
//     public String location() {
//         return header(HttpConsts.LOCATION);
//     }
// 
//     public InputStream stream() {
//         return mResponse.body().byteStream();
//     }
// 
//     public byte[] bytes() throws IOException {
//         return mResponse.body().bytes();
//     }
// 
//     public Reader reader() {
//         return mResponse.body().charStream();
//     }
// 
//     public String string() throws IOException {
//         return mResponse.body().string();
//     }
// 
//     public int writeTo(OutputStream os) throws IOException {
//         return IOUtils.copy(stream(), os);
//     }
// 
//     public boolean writeTo(File file) throws IOException {
//         return IOUtils.writeStream(file, stream());
//     }
// 
//     public void close() {
//         mResponse.body().close();
//     }
// 
//     public String dumpBody() {
//         try {
//             char[] buffer = new char[512];
//             reader().read(buffer);
//             return new String(buffer);
//         } catch (IOException e) {
//             return e.getMessage();
//         }
//     }
// 
//     public String dumpHeaders() {
//         return mResponse.headers().toString();
//     }
// 
//     public static String prettyPrintJson(final String rawJson) {
//         final Gson gson = new GsonBuilder().setPrettyPrinting().create();
//         return gson.toJson(new JsonParser().parse(rawJson));
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf(mResponse);
//     }
// }


import com.google.gson.Gson;
import com.mcxiaoke.next.http.NextResponse;
import java.io.IOException;
import java.lang.reflect.Type;
package com.mcxiaoke.next.http.transformer;



/**
 * User: mcxiaoke
 * Date: 15/8/21
 * Time: 12:42
 */
public class GsonTransformer<T> implements HttpTransformer<T> {
    private Gson gson;
    private Type type;

    public GsonTransformer(final Gson gson, final Class<T> clazz) {
        this.gson = gson;
        this.type = clazz;
    }

    public GsonTransformer(final Gson gson, final Type type) {
        this.gson = gson;
        this.type = type;
    }

    @SuppressWarnings("unchecked")
    @Override
// Path: http/src/main/java/com/mcxiaoke/next/http/NextResponse.java
// public class NextResponse {
//     public static final String TAG = NextResponse.class.getSimpleName();
// 
//     private Response mResponse;
//     private int mStatusCode;
//     private String mMessage;
//     private Date mCreatedAt;
// 
//     NextResponse(final Response response) {
//         mResponse = response;
//         mStatusCode = response.code();
//         mMessage = response.message();
//         mCreatedAt = new Date();
//     }
// 
//     public Response raw() {
//         return mResponse;
//     }
// 
//     public Date createdAt() {
//         return mCreatedAt;
//     }
// 
//     public boolean successful() {
//         return mResponse.isSuccessful();
//     }
// 
//     public boolean redirect() {
//         return mResponse.isRedirect();
//     }
// 
//     public int code() {
//         return mStatusCode;
//     }
// 
//     public String message() {
//         return mMessage;
//     }
// 
//     public String description() {
//         return mStatusCode + ":" + mMessage;
//     }
// 
//     public long contentLength() {
//         return mResponse.body().contentLength();
//     }
// 
//     public String contentType() {
//         return mResponse.body().contentType().toString();
//     }
// 
//     public Charset charset() {
//         return mResponse.body().contentType().charset();
//     }
// 
//     public Headers headers() {
//         return mResponse.headers();
//     }
// 
//     public String header(String name) {
//         return mResponse.headers().get(name);
//     }
// 
//     public String location() {
//         return header(HttpConsts.LOCATION);
//     }
// 
//     public InputStream stream() {
//         return mResponse.body().byteStream();
//     }
// 
//     public byte[] bytes() throws IOException {
//         return mResponse.body().bytes();
//     }
// 
//     public Reader reader() {
//         return mResponse.body().charStream();
//     }
// 
//     public String string() throws IOException {
//         return mResponse.body().string();
//     }
// 
//     public int writeTo(OutputStream os) throws IOException {
//         return IOUtils.copy(stream(), os);
//     }
// 
//     public boolean writeTo(File file) throws IOException {
//         return IOUtils.writeStream(file, stream());
//     }
// 
//     public void close() {
//         mResponse.body().close();
//     }
// 
//     public String dumpBody() {
//         try {
//             char[] buffer = new char[512];
//             reader().read(buffer);
//             return new String(buffer);
//         } catch (IOException e) {
//             return e.getMessage();
//         }
//     }
// 
//     public String dumpHeaders() {
//         return mResponse.headers().toString();
//     }
// 
//     public static String prettyPrintJson(final String rawJson) {
//         final Gson gson = new GsonBuilder().setPrettyPrinting().create();
//         return gson.toJson(new JsonParser().parse(rawJson));
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf(mResponse);
//     }
// }


// Path: http/src/main/java/com/mcxiaoke/next/http/transformer/GsonTransformer.java
import com.google.gson.Gson;
import com.mcxiaoke.next.http.NextResponse;
import java.io.IOException;
import java.lang.reflect.Type;

package com.mcxiaoke.next.http.transformer;



/**
 * User: mcxiaoke
 * Date: 15/8/21
 * Time: 12:42
 */
public class GsonTransformer<T> implements HttpTransformer<T> {
    private Gson gson;
    private Type type;

    public GsonTransformer(final Gson gson, final Class<T> clazz) {
        this.gson = gson;
        this.type = clazz;
    }

    public GsonTransformer(final Gson gson, final Type type) {
        this.gson = gson;
        this.type = type;
    }

    @SuppressWarnings("unchecked")
    @Override
    public T transform(final NextResponse response) throws IOException {