// Path: glin/src/main/java/org/loader/glin/call/Call.java
// public abstract class Call<T> {
// 
//     public static final int DEF_HTTP_CODE_CHAN_CANCELED = 468;
//     public static final String DEF_MSG_CHAN_CANCELED = "chan canceled";
// 
//     protected String mUrl;
//     protected Params mParams;
//     protected LinkedHashMap<String, String> mHeaders;
// 
//     protected IClient mClient;
//     protected Object mTag;
// 
//     protected boolean shouldCache;
// 
//     private ChanNode mBeforeChanNode;
//     private ChanNode mAfterChanNode;
// 
//     private GlobalChanNode mBeforeGlobalChanNode;
//     private GlobalChanNode mAfterGlobalChanNode;
// 
//     private Callback<T> mCallback;
// 
//     public Call(IClient client, String url,
//                 Params params, Object tag,
//                 boolean cache) {
//         mClient = client;
//         mUrl = url;
//         mParams = params;
//         mTag = tag;
//         shouldCache = cache;
//     }
// 
//     public Call<T> before(ChanNode chanNode) {
//         if (mBeforeChanNode == null) {
//             mBeforeChanNode = chanNode;
//             chanNode.beforeCall(true);
//         } else {
//             next(chanNode, mBeforeChanNode);
//         }
// 
//         return this;
//     }
// 
//     public Call<T> after(ChanNode chanNode) {
//         if (mAfterChanNode == null) {
//             mAfterChanNode = chanNode;
//             chanNode.beforeCall(false);
//         } else {
//             next(chanNode, mAfterChanNode);
//         }
//         return this;
//     }
// 
//     public Call<T> next(ChanNode chanNode) {
//         ChanNode current = mAfterChanNode == null ? mBeforeChanNode : mAfterChanNode;
//         return next(chanNode, current);
//     }
// 
//     private Call<T> next(ChanNode chanNode, ChanNode header) {
//         ChanNode current = header;
// 
//         if (current == null) {
//             throw new RuntimeException("there is no before chans, please call before() first");
//         }
// 
//         while(current.nextChanNode() != null) {
//             current = current.nextChanNode();
//         }
// 
//         current.nextChanNode(chanNode);
//         chanNode.beforeCall(current.isBeforeCall());
// 
//         return this;
//     }
// 
//     public void enqueue(Callback<T> callback) {
//         mCallback = callback;
// 
//         if (mBeforeGlobalChanNode != null) {
//             before(mBeforeGlobalChanNode);
//         }
// 
//         if (mAfterGlobalChanNode != null) {
//             ChanNode after = mAfterChanNode;
//             mAfterChanNode = mAfterGlobalChanNode;
//             mAfterChanNode.nextChanNode(after);
//         }
// 
//         Context ctx = new Context(this);
//         callback.attach(ctx, mAfterChanNode);
// 
//         if (mBeforeChanNode != null) {
//             mBeforeChanNode.exec(ctx);
//             return;
//         }
// 
//         exec(callback);
//     }
// 
//     public void exec() { exec(mCallback);}
// 
//     public abstract void exec(Callback<T> callback);
// 
//     public void cancel(int code, String msg) {
//         if (mCallback != null) {
//             Result<T> result = new Result<>();
//             result.ok(false);
//             result.setCode(code);
//             result.setMessage(msg);
//             mCallback.onResponse(result);
//         }
//     }
// 
//     public void setGlobalChanNode(GlobalChanNode before, GlobalChanNode after) {
//         mBeforeGlobalChanNode = before;
//         mAfterGlobalChanNode = after;
// 
//         if (mBeforeGlobalChanNode != null) {
//             mBeforeGlobalChanNode.beforeCall(true);
//         }
// 
//         if (mAfterGlobalChanNode != null) {
//             mAfterGlobalChanNode.beforeCall(false);
//         }
//     }
// 
//     public Call<T> header(LinkedHashMap<String, String> headers) {
//         mHeaders = headers;
//         return this;
//     }
// 
//     public Call<T> shouldCache(boolean cache) {
//         shouldCache = cache;
//         return this;
//     }
// 
//     public Call<T> rewriteUrl(String url) {
//         mUrl = url;
//         return this;
//     }
// 
//     public LinkedHashMap<String, String> getHeaders() {
//         return mHeaders;
//     }
// 
//     public Params getParams() {
//         return mParams;
//     }
// 
//     public String getUrl() {
//         return mUrl;
//     }
// 
//     public boolean shouldCache() {
//         return shouldCache;
//     }
// }
// 
// Path: glinsample/src/main/java/org/loader/glinsample/bean/UserInfo.java
// public class UserInfo implements Serializable {
//     private String id;
//     private String name;
//     private int age;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// }


import org.loader.glin.annotation.Arg;
import org.loader.glin.annotation.GET;
import org.loader.glin.annotation.POST;
import org.loader.glin.annotation.Path;
import org.loader.glin.annotation.ShouldCache;
import org.loader.glin.call.Call;
import org.loader.glinsample.bean.UserInfo;
package org.loader.glinsample.api;


public interface Api {

    @GET("/user/{:path}/")
    Call<UserInfo> uid(@Path("path") String path);

    @ShouldCache
    @POST("/user/info/")
// Path: glin/src/main/java/org/loader/glin/call/Call.java
// public abstract class Call<T> {
// 
//     public static final int DEF_HTTP_CODE_CHAN_CANCELED = 468;
//     public static final String DEF_MSG_CHAN_CANCELED = "chan canceled";
// 
//     protected String mUrl;
//     protected Params mParams;
//     protected LinkedHashMap<String, String> mHeaders;
// 
//     protected IClient mClient;
//     protected Object mTag;
// 
//     protected boolean shouldCache;
// 
//     private ChanNode mBeforeChanNode;
//     private ChanNode mAfterChanNode;
// 
//     private GlobalChanNode mBeforeGlobalChanNode;
//     private GlobalChanNode mAfterGlobalChanNode;
// 
//     private Callback<T> mCallback;
// 
//     public Call(IClient client, String url,
//                 Params params, Object tag,
//                 boolean cache) {
//         mClient = client;
//         mUrl = url;
//         mParams = params;
//         mTag = tag;
//         shouldCache = cache;
//     }
// 
//     public Call<T> before(ChanNode chanNode) {
//         if (mBeforeChanNode == null) {
//             mBeforeChanNode = chanNode;
//             chanNode.beforeCall(true);
//         } else {
//             next(chanNode, mBeforeChanNode);
//         }
// 
//         return this;
//     }
// 
//     public Call<T> after(ChanNode chanNode) {
//         if (mAfterChanNode == null) {
//             mAfterChanNode = chanNode;
//             chanNode.beforeCall(false);
//         } else {
//             next(chanNode, mAfterChanNode);
//         }
//         return this;
//     }
// 
//     public Call<T> next(ChanNode chanNode) {
//         ChanNode current = mAfterChanNode == null ? mBeforeChanNode : mAfterChanNode;
//         return next(chanNode, current);
//     }
// 
//     private Call<T> next(ChanNode chanNode, ChanNode header) {
//         ChanNode current = header;
// 
//         if (current == null) {
//             throw new RuntimeException("there is no before chans, please call before() first");
//         }
// 
//         while(current.nextChanNode() != null) {
//             current = current.nextChanNode();
//         }
// 
//         current.nextChanNode(chanNode);
//         chanNode.beforeCall(current.isBeforeCall());
// 
//         return this;
//     }
// 
//     public void enqueue(Callback<T> callback) {
//         mCallback = callback;
// 
//         if (mBeforeGlobalChanNode != null) {
//             before(mBeforeGlobalChanNode);
//         }
// 
//         if (mAfterGlobalChanNode != null) {
//             ChanNode after = mAfterChanNode;
//             mAfterChanNode = mAfterGlobalChanNode;
//             mAfterChanNode.nextChanNode(after);
//         }
// 
//         Context ctx = new Context(this);
//         callback.attach(ctx, mAfterChanNode);
// 
//         if (mBeforeChanNode != null) {
//             mBeforeChanNode.exec(ctx);
//             return;
//         }
// 
//         exec(callback);
//     }
// 
//     public void exec() { exec(mCallback);}
// 
//     public abstract void exec(Callback<T> callback);
// 
//     public void cancel(int code, String msg) {
//         if (mCallback != null) {
//             Result<T> result = new Result<>();
//             result.ok(false);
//             result.setCode(code);
//             result.setMessage(msg);
//             mCallback.onResponse(result);
//         }
//     }
// 
//     public void setGlobalChanNode(GlobalChanNode before, GlobalChanNode after) {
//         mBeforeGlobalChanNode = before;
//         mAfterGlobalChanNode = after;
// 
//         if (mBeforeGlobalChanNode != null) {
//             mBeforeGlobalChanNode.beforeCall(true);
//         }
// 
//         if (mAfterGlobalChanNode != null) {
//             mAfterGlobalChanNode.beforeCall(false);
//         }
//     }
// 
//     public Call<T> header(LinkedHashMap<String, String> headers) {
//         mHeaders = headers;
//         return this;
//     }
// 
//     public Call<T> shouldCache(boolean cache) {
//         shouldCache = cache;
//         return this;
//     }
// 
//     public Call<T> rewriteUrl(String url) {
//         mUrl = url;
//         return this;
//     }
// 
//     public LinkedHashMap<String, String> getHeaders() {
//         return mHeaders;
//     }
// 
//     public Params getParams() {
//         return mParams;
//     }
// 
//     public String getUrl() {
//         return mUrl;
//     }
// 
//     public boolean shouldCache() {
//         return shouldCache;
//     }
// }
// 
// Path: glinsample/src/main/java/org/loader/glinsample/bean/UserInfo.java
// public class UserInfo implements Serializable {
//     private String id;
//     private String name;
//     private int age;
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// }


// Path: glinsample/src/main/java/org/loader/glinsample/api/Api.java
import org.loader.glin.annotation.Arg;
import org.loader.glin.annotation.GET;
import org.loader.glin.annotation.POST;
import org.loader.glin.annotation.Path;
import org.loader.glin.annotation.ShouldCache;
import org.loader.glin.call.Call;
import org.loader.glinsample.bean.UserInfo;

package org.loader.glinsample.api;


public interface Api {

    @GET("/user/{:path}/")
    Call<UserInfo> uid(@Path("path") String path);

    @ShouldCache
    @POST("/user/info/")
    Call<UserInfo> info(@Arg("uid") String id, @Arg("name") String name);