package io.vertx.servicediscovery.types.impl;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
import io.vertx.redis.client.Redis;
import io.vertx.redis.client.RedisOptions;
import io.vertx.servicediscovery.Record;
import io.vertx.servicediscovery.ServiceDiscovery;
import io.vertx.servicediscovery.ServiceReference;
import io.vertx.servicediscovery.types.AbstractServiceReference;
import io.vertx.servicediscovery.types.RedisDataSource;
import java.util.Objects;
public class RedisDataSourceImpl implements RedisDataSource {
@Override
public String name() {
return RedisDataSource.TYPE;
}
@Override
public ServiceReference get(Vertx vertx, ServiceDiscovery discovery, Record record, JsonObject configuration) {
Objects.requireNonNull(vertx);
Objects.requireNonNull(record);
Objects.requireNonNull(discovery);
return new RedisServiceReference(vertx, discovery, record, configuration);
}
private class RedisServiceReference extends AbstractServiceReference<Redis> {
private final JsonObject config;
RedisServiceReference(Vertx vertx, ServiceDiscovery discovery, Record record, JsonObject config) {
super(vertx, discovery, record);
this.config = config;
}
@Override
protected Redis retrieve() {
JsonObject result = record().getMetadata().copy();
result.mergeIn(record().getLocation());
if (config != null) {
result.mergeIn(config);
}
return Redis.createClient(vertx, new RedisOptions(result));
}
@Override
protected void onClose() {
service.close();
}
}
}