package core.framework.test.redis;
import core.framework.api.redis.RedisSet;
import core.framework.api.util.Exceptions;
import core.framework.api.util.Sets;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* @author neo
*/
public final class MockRedisSet implements RedisSet {
private final MockRedis redis;
public MockRedisSet(MockRedis redis) {
this.redis = redis;
}
@Override
public boolean add(String key, String value) {
MockRedis.Value setValue = redis.store.computeIfAbsent(key, k -> MockRedis.Value.setValue());
validate(key, setValue);
return setValue.set.add(value);
}
@Override
public Set<String> members(String key) {
MockRedis.Value value = redis.store.get(key);
if (value == null) return Sets.newHashSet();
validate(key, value);
return new HashSet<>(value.set);
}
@Override
public boolean isMember(String key, String value) {
MockRedis.Value redisValue = redis.store.get(key);
if (redisValue == null) return false;
validate(key, redisValue);
return redisValue.set.contains(value);
}
@Override
public boolean remove(String key, String... values) {
MockRedis.Value redisValue = redis.store.get(key);
if (redisValue == null) return false;
validate(key, redisValue);
return redisValue.set.removeAll(Arrays.asList(values));
}
private void validate(String key, MockRedis.Value value) {
if (value.type != MockRedis.ValueType.SET) throw Exceptions.error("invalid type, key={}, type={}", key, value.type);
}
}