package reactor.util.context;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.stream.Stream;
final class Context1 implements Context, Map.Entry<Object, Object> {
final Object key;
final Object value;
Context1(Object key, Object value) {
this.key = key;
this.value = value;
}
@Override
public Context put(Object key, Object value) {
Objects.requireNonNull(key, "key");
Objects.requireNonNull(value, "value");
if(this.key.equals(key)){
return new Context1(key, value);
}
return new Context2(this.key, this.value, key, value);
}
@Override
public Context delete(Object key) {
Objects.requireNonNull(key, "key");
if (this.key.equals(key)) {
return Context.empty();
}
return this;
}
@Override
public boolean hasKey(Object key) {
return this.key.equals(key);
}
@Override
@SuppressWarnings("unchecked")
public <T> T get(Object key) {
if (hasKey(key)) {
return (T)this.value;
}
throw new NoSuchElementException("Context does not contain key: " + key);
}
@Override
public Stream<Map.Entry<Object, Object>> stream() {
return Stream.of(this);
}
@Override
public Object getKey() {
return key;
}
@Override
public Object getValue() {
return value;
}
@Override
public Object setValue(Object value) {
throw new UnsupportedOperationException("Does not support in-place update");
}
@Override
public String toString() {
return "Context1{" + key + '='+ value + '}';
}
}