/* * Copyright (C) 2021-present ScyllaDB */ /* * SPDX-License-Identifier: AGPL-3.0-or-later */ #pragma once #include "mutation_fragment_v2.hh" template concept FlatMutationReaderConsumer = requires(Consumer c, mutation_fragment mf) { { c(std::move(mf)) } -> std::same_as; } || requires(Consumer c, mutation_fragment mf) { { c(std::move(mf)) } -> std::same_as>; }; template concept FlattenedConsumer = StreamedMutationConsumer && requires(T obj, const dht::decorated_key& dk) { { obj.consume_new_partition(dk) }; { obj.consume_end_of_partition() }; }; template concept FlattenedConsumerFilter = requires(T filter, const dht::decorated_key& dk, const mutation_fragment& mf) { { filter(dk) } -> std::same_as; { filter(mf) } -> std::same_as; { filter.on_end_of_stream() } -> std::same_as; }; template concept FlatMutationReaderConsumerV2 = requires(Consumer c, mutation_fragment_v2 mf) { { c(std::move(mf)) } -> std::same_as; } || requires(Consumer c, mutation_fragment_v2 mf) { { c(std::move(mf)) } -> std::same_as>; }; template concept MutationConsumer = requires(Consumer c, mutation m) { { c(std::move(m)) } -> std::same_as; } || requires(Consumer c, mutation m) { { c(std::move(m)) } -> std::same_as>; }; template concept FlattenedConsumerV2 = StreamedMutationConsumerV2 && requires(T obj, const dht::decorated_key& dk) { { obj.consume_new_partition(dk) }; { obj.consume_end_of_partition() }; }; template concept FlattenedConsumerFilterV2 = requires(T filter, const dht::decorated_key& dk, const mutation_fragment_v2& mf) { { filter(dk) } -> std::same_as; { filter(mf) } -> std::same_as; { filter.on_end_of_stream() } -> std::same_as; };