package com.nominanuda.hyperapi;
import java.lang.reflect.Proxy;
import okhttp3.OkHttpClient;
import static com.nominanuda.zen.io.Uris.URIS;
/**
* Created by azum on 27/03/17.
*/
public class HttpHyperApiFactory implements HyperApiFactory {
private final OkHttpClient okHttpClient;
private final String uriPrefix; // TODO configurable (how?)
public HttpHyperApiFactory(String prefix, OkHttpClient client) {
uriPrefix = prefix;
okHttpClient = client;
}
public HttpHyperApiFactory(OkHttpClient client) {
this(null, client);
}
@Override
public <T> T getInstance(String instanceHint, Class<? extends T> apiInterface) {
return apiInterface.cast(Proxy.newProxyInstance(
apiInterface.getClassLoader(), new Class[] { apiInterface },
new HyperApiHttpInvocationHandler(okHttpClient, URIS.pathJoin(uriPrefix, instanceHint))
));
}
}