package com.github.aesteve.vertx.nubes.reflections.injectors.typed;
import com.github.aesteve.vertx.nubes.Config;
import com.github.aesteve.vertx.nubes.context.PaginationContext;
import com.github.aesteve.vertx.nubes.marshallers.Payload;
import com.github.aesteve.vertx.nubes.reflections.injectors.typed.impl.*;
import io.vertx.core.Vertx;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.core.http.HttpVersion;
import io.vertx.core.net.SocketAddress;
import io.vertx.ext.web.RoutingContext;
import io.vertx.ext.web.Session;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
public class TypedParamInjectorRegistry {
private final Map<Class<?>, ParamInjector<?>> map;
@SuppressWarnings({"unchecked", "rawtypes"})
public TypedParamInjectorRegistry(Config config) {
map = new HashMap<>();
registerInjector(Vertx.class, new VertxParamInjector());
registerInjector(Session.class, new SessionParamInjector());
registerInjector(RoutingContext.class, new RoutingContextParamInjector());
registerInjector(Payload.class, new PayloadParamInjector());
registerInjector(PaginationContext.class, new PaginationContextParamInjector());
registerInjector(EventBus.class, new EventBusParamInjector());
registerInjector(ResourceBundle.class, new ResourceBundleParamInjector(config));
registerInjector(HttpServerRequest.class, new RequestParamInjector());
registerInjector(HttpServerResponse.class, new ResponseParamInjector());
registerInjector(SocketAddress.class, new SocketAddressParamInjector());
registerInjector(HttpVersion.class, new HttpVersionParamInjector());
}
public <T> void registerInjector(Class<? extends T> clazz, ParamInjector<T> injector) {
map.put(clazz, injector);
}
@SuppressWarnings("unchecked")
public <T> ParamInjector<T> getInjector(Class<? extends T> clazz) {
return (ParamInjector<T>) map.get(clazz);
}
}