package it.cavallium.dbengine.client; import io.net5.buffer.api.Drop; import io.net5.buffer.api.Owned; import io.net5.buffer.api.internal.ResourceSupport; import it.cavallium.dbengine.client.query.current.data.TotalHitsCount; import it.cavallium.dbengine.database.LLSearchResultShard; import it.cavallium.dbengine.database.LiveResourceSupport; import it.cavallium.dbengine.database.collections.ValueGetter; import java.util.Objects; import org.reactivestreams.Publisher; import org.warp.commonutils.log.Logger; import org.warp.commonutils.log.LoggerFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @SuppressWarnings("unused") public final class SearchResultKeys extends LiveResourceSupport, SearchResultKeys> { private static final Logger logger = LoggerFactory.getLogger(SearchResultKeys.class); private Flux> results; private TotalHitsCount totalHitsCount; public SearchResultKeys(Flux> results, TotalHitsCount totalHitsCount, Drop> drop) { super(drop); this.results = results; this.totalHitsCount = totalHitsCount; } public static SearchResultKeys empty() { return new SearchResultKeys(Flux.empty(), TotalHitsCount.of(0, true), d -> {}); } public SearchResult withValues(ValueGetter valuesGetter) { return new SearchResult<>(results.map(item -> new SearchResultItem<>(item.key(), item.key().flatMap(valuesGetter::get), item.score() )), totalHitsCount, d -> this.close()); } public Flux> results() { return results; } public TotalHitsCount totalHitsCount() { return totalHitsCount; } @Override public String toString() { return "SearchResultKeys[" + "results=" + results + ", " + "totalHitsCount=" + totalHitsCount + ']'; } @Override protected RuntimeException createResourceClosedException() { return new IllegalStateException("Closed"); } @Override protected Owned> prepareSend() { var results = this.results; var totalHitsCount = this.totalHitsCount; makeInaccessible(); return drop -> new SearchResultKeys<>(results, totalHitsCount, drop); } protected void makeInaccessible() { this.results = null; this.totalHitsCount = null; } }