content: package com.github.aesteve.vertx.nubes.reflections.injectors.annot.impl;
  
  import com.github.aesteve.vertx.nubes.annotations.params.Header;
  import com.github.aesteve.vertx.nubes.exceptions.params.InvalidParamValueException;
  import com.github.aesteve.vertx.nubes.exceptions.params.MandatoryParamException;
  import com.github.aesteve.vertx.nubes.exceptions.params.WrongParameterException;
  import com.github.aesteve.vertx.nubes.exceptions.params.WrongParameterException.ParamType;
  import com.github.aesteve.vertx.nubes.reflections.adapters.ParameterAdapterRegistry;
  import com.github.aesteve.vertx.nubes.reflections.injectors.annot.AnnotatedParamInjector;
  import io.vertx.ext.web.RoutingContext;
  
  public class HeaderParamInjector implements AnnotatedParamInjector<Header> {
  
    private final ParameterAdapterRegistry registry;
  
    public HeaderParamInjector(ParameterAdapterRegistry registry) {
      this.registry = registry;
    }
  
    @Override
    public Object resolve(RoutingContext context, Header annotation, String paramName, Class<?> resultClass) throws WrongParameterException {
      String headerName = annotation.value();
      if ("".equals(headerName)) {
        headerName = paramName;
      }
      String headerValue = context.request().getHeader(headerName);
      if (headerValue == null && annotation.mandatory()) {
        throw new MandatoryParamException(ParamType.HEADER, headerName);
      }
      try {
        return registry.adaptParam(headerValue, resultClass);
      } catch (IllegalArgumentException iae) {
        throw new InvalidParamValueException(ParamType.HEADER, headerName, headerValue, iae);
      }
    }
  
  }
  