package tc.oc.commons.core.inject;
import java.util.Optional;
import javax.inject.Inject;
import javax.inject.Provider;
import com.google.common.reflect.TypeParameter;
import com.google.inject.Key;
import tc.oc.commons.core.reflect.ResolvableType;
public class OptionalProvider<T> implements Provider<Optional<T>> {
public static <T> Key<OptionalProvider<T>> key(Key<T> key) {
return Key.get(
new ResolvableType<OptionalProvider<T>>(){}
.where(new TypeParameter<T>(){}, key.getTypeLiteral())
);
}
final Provider<T> provider;
@Inject
OptionalProvider(Provider<T> provider) {
this.provider = provider;
}
@Override
public Optional<T> get() {
return Optional.of(provider.get());
}
}