package it.cavallium.dbengine.database.collections; import it.cavallium.dbengine.client.CompositeSnapshot; import java.util.Objects; import org.jetbrains.annotations.Nullable; import reactor.core.publisher.Mono; public interface DatabaseStage extends DatabaseEntryable { Mono get(@Nullable CompositeSnapshot snapshot); default Mono getOrDefault(@Nullable CompositeSnapshot snapshot, Mono defaultValue) { return get(snapshot).switchIfEmpty(defaultValue).single(); } default Mono set(T value) { return setAndGetStatus(value).then(); } Mono setAndGetPrevious(T value); default Mono setAndGetStatus(T value) { return setAndGetPrevious(value).map(oldValue -> !Objects.equals(oldValue, value)).defaultIfEmpty(false); } default Mono clear() { return clearAndGetStatus().then(); } Mono clearAndGetPrevious(); default Mono clearAndGetStatus() { return clearAndGetPrevious().map(Objects::nonNull).defaultIfEmpty(false); } default Mono close() { return Mono.empty(); } Mono size(@Nullable CompositeSnapshot snapshot, boolean fast); default Mono isEmpty(@Nullable CompositeSnapshot snapshot) { return size(snapshot, false).map(size -> size <= 0); } }