// Path: glin/src/main/java/org/loader/glin/RawResult.java
// public class RawResult {
//     private int statusCode;
//     private String message;
//     private String response;
// 
//     public RawResult() {}
// 
//     public RawResult(int statusCode, String message, String response) {
//         this.statusCode = statusCode;
//         this.message = message;
//         this.response = response;
//     }
// 
//     public int getStatusCode() {
//         return statusCode;
//     }
// 
//     public void setStatusCode(int statusCode) {
//         this.statusCode = statusCode;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getResponse() {
//         return response;
//     }
// 
//     public void setResponse(String response) {
//         this.response = response;
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/Result.java
// public class Result<T> {
//     private boolean ok;
//     private String message;
//     private T result;
//     private int code;
//     private Object obj;
//     private boolean isCache;
// 
//     public boolean isOK() {
//         return ok;
//     }
// 
//     public void ok(boolean ok) {
//         this.ok = ok;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String mMessage) {
//         this.message = mMessage;
//     }
// 
//     public T getResult() {
//         return result;
//     }
// 
//     public void setResult(T mResult) {
//         this.result = mResult;
//     }
// 
//     public int getCode() {
//         return code;
//     }
// 
//     public void setCode(int code) {
//         this.code = code;
//     }
// 
//     public Object getObj() {
//         return obj;
//     }
// 
//     public void setObj(Object obj) {
//         this.obj = obj;
//     }
// 
//     public <V> V assertGetObj() {
//         return (V) getObj();
//     }
// 
//     public boolean isCache() {
//         return isCache;
//     }
// 
//     public void setCache(boolean cache) {
//         isCache = cache;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder();
//         sb.append("ok: ").append(ok).append("\n");
//         sb.append("message: ").append(message).append("\n");
//         sb.append("obj: ").append(obj).append("\n");
//         sb.append("result: ").append(result).append("\n");
//         sb.append("code: ").append(code).append("\n");
//         sb.append("is_cache: ").append(isCache);
// 
//         return sb.toString();
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/factory/ParserFactory.java
// public interface ParserFactory {
//     Parser getParser();
//     Parser getListParser();
// }
// 
// Path: glin/src/main/java/org/loader/glin/parser/Parser.java
// public abstract class Parser {
//     public String mKey;
// 
//     public Parser() {
// 
//     }
// 
//     public Parser(String key) {
//         mKey = key;
//     }
// 
//     /**
//      *
//      * @param klass the class of data struct
//      * @param netResult
//      * @param <T>
//      * @return
//      */
//     public abstract <T> Result<T> parse(Class<T> klass, RawResult netResult);
// }


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.loader.glin.RawResult;
import org.loader.glin.Result;
import org.loader.glin.factory.ParserFactory;
import org.loader.glin.parser.Parser;
package org.loader.glinsample.utils;



public class Parsers implements ParserFactory {

    @Override
    public Parser getParser() {
        return new Parser() {
            @Override
            public <T> Result<T> parse(Class<T> klass, RawResult netResult) {
                Result<T> result = new Result<>();
                try {
                    JSONObject baseObject = JSON.parseObject(netResult.getResponse());
                    if (baseObject.getBoolean("ok")) {
                        if (baseObject.containsKey("data")) {
                            T t = baseObject.getObject("data", klass);
                            result.setResult(t);
                            result.ok(true);
                            return result;
                        }
                    }

                    throw new Exception();
                } catch (Exception e) {
                    e.printStackTrace();
                    result.ok(false);
                    result.setMessage("error");
                }
                return result;
            }
        };
    }

    @Override
// Path: glin/src/main/java/org/loader/glin/RawResult.java
// public class RawResult {
//     private int statusCode;
//     private String message;
//     private String response;
// 
//     public RawResult() {}
// 
//     public RawResult(int statusCode, String message, String response) {
//         this.statusCode = statusCode;
//         this.message = message;
//         this.response = response;
//     }
// 
//     public int getStatusCode() {
//         return statusCode;
//     }
// 
//     public void setStatusCode(int statusCode) {
//         this.statusCode = statusCode;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getResponse() {
//         return response;
//     }
// 
//     public void setResponse(String response) {
//         this.response = response;
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/Result.java
// public class Result<T> {
//     private boolean ok;
//     private String message;
//     private T result;
//     private int code;
//     private Object obj;
//     private boolean isCache;
// 
//     public boolean isOK() {
//         return ok;
//     }
// 
//     public void ok(boolean ok) {
//         this.ok = ok;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String mMessage) {
//         this.message = mMessage;
//     }
// 
//     public T getResult() {
//         return result;
//     }
// 
//     public void setResult(T mResult) {
//         this.result = mResult;
//     }
// 
//     public int getCode() {
//         return code;
//     }
// 
//     public void setCode(int code) {
//         this.code = code;
//     }
// 
//     public Object getObj() {
//         return obj;
//     }
// 
//     public void setObj(Object obj) {
//         this.obj = obj;
//     }
// 
//     public <V> V assertGetObj() {
//         return (V) getObj();
//     }
// 
//     public boolean isCache() {
//         return isCache;
//     }
// 
//     public void setCache(boolean cache) {
//         isCache = cache;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder();
//         sb.append("ok: ").append(ok).append("\n");
//         sb.append("message: ").append(message).append("\n");
//         sb.append("obj: ").append(obj).append("\n");
//         sb.append("result: ").append(result).append("\n");
//         sb.append("code: ").append(code).append("\n");
//         sb.append("is_cache: ").append(isCache);
// 
//         return sb.toString();
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/factory/ParserFactory.java
// public interface ParserFactory {
//     Parser getParser();
//     Parser getListParser();
// }
// 
// Path: glin/src/main/java/org/loader/glin/parser/Parser.java
// public abstract class Parser {
//     public String mKey;
// 
//     public Parser() {
// 
//     }
// 
//     public Parser(String key) {
//         mKey = key;
//     }
// 
//     /**
//      *
//      * @param klass the class of data struct
//      * @param netResult
//      * @param <T>
//      * @return
//      */
//     public abstract <T> Result<T> parse(Class<T> klass, RawResult netResult);
// }


// Path: glinsample/src/main/java/org/loader/glinsample/utils/Parsers.java
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.loader.glin.RawResult;
import org.loader.glin.Result;
import org.loader.glin.factory.ParserFactory;
import org.loader.glin.parser.Parser;

package org.loader.glinsample.utils;



public class Parsers implements ParserFactory {

    @Override
    public Parser getParser() {
        return new Parser() {
            @Override
            public <T> Result<T> parse(Class<T> klass, RawResult netResult) {
                Result<T> result = new Result<>();
                try {
                    JSONObject baseObject = JSON.parseObject(netResult.getResponse());
                    if (baseObject.getBoolean("ok")) {
                        if (baseObject.containsKey("data")) {
                            T t = baseObject.getObject("data", klass);
                            result.setResult(t);
                            result.ok(true);
                            return result;
                        }
                    }

                    throw new Exception();
                } catch (Exception e) {
                    e.printStackTrace();
                    result.ok(false);
                    result.setMessage("error");
                }
                return result;
            }
        };
    }

    @Override
    public Parser getListParser() {