package com.lambdaworks.redis.output;
import static java.lang.Double.parseDouble;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import com.lambdaworks.redis.GeoCoordinates;
import com.lambdaworks.redis.codec.RedisCodec;
import com.lambdaworks.redis.internal.LettuceAssert;
/**
* A list output that creates a list with {@link GeoCoordinates}'s.
*
* @author Mark Paluch
*/
public class GeoCoordinatesListOutput<K, V> extends CommandOutput<K, V, List<GeoCoordinates>> implements StreamingOutput<GeoCoordinates> {
private Double x;
private Subscriber<GeoCoordinates> subscriber;
public GeoCoordinatesListOutput(RedisCodec<K, V> codec) {
super(codec, new ArrayList<>());
setSubscriber(ListSubscriber.of(output));
}
@Override
public void set(ByteBuffer bytes) {
Double value = (bytes == null) ? 0 : parseDouble(decodeAscii(bytes));
if (x == null) {
x = value;
return;
}
subscriber.onNext(new GeoCoordinates(x, value));
x = null;
}
@Override
public void multi(int count) {
if (count == -1) {
subscriber.onNext(null);
}
}
@Override
public void setSubscriber(Subscriber<GeoCoordinates> subscriber) {
LettuceAssert.notNull(subscriber, "Subscriber must not be null");
this.subscriber = subscriber;
}
@Override
public Subscriber<GeoCoordinates> getSubscriber() {
return subscriber;
}
}