#ifndef GRPC_SRC_CORE_LIB_CHANNEL_PROMISE_BASED_FILTER_H
#define GRPC_SRC_CORE_LIB_CHANNEL_PROMISE_BASED_FILTER_H
#include <grpc/support/port_platform.h>
#include <stdint.h>
#include <stdlib.h>
#include <atomic>
#include <initializer_list>
#include <memory>
#include <new>
#include <string>
#include <type_traits>
#include <utility>
#include "absl/container/inlined_vector.h"
#include "absl/functional/function_ref.h"
#include "absl/meta/type_traits.h"
#include "absl/status/status.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include <grpc/event_engine/event_engine.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include "src/core/lib/channel/call_finalization.h"
#include "src/core/lib/channel/channel_fwd.h"
#include "src/core/lib/channel/channel_stack.h"
#include "src/core/lib/channel/context.h"
#include "src/core/lib/event_engine/default_event_engine.h"
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/gprpp/time.h"
#include "src/core/lib/iomgr/call_combiner.h"
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/polling_entity.h"
#include "src/core/lib/promise/activity.h"
#include "src/core/lib/promise/arena_promise.h"
#include "src/core/lib/promise/context.h"
#include "src/core/lib/promise/pipe.h"
#include "src/core/lib/promise/poll.h"
#include "src/core/lib/resource_quota/arena.h"
#include "src/core/lib/slice/slice_buffer.h"
#include "src/core/lib/surface/call.h"
#include "src/core/lib/transport/error_utils.h"
#include "src/core/lib/transport/metadata_batch.h"
#include "src/core/lib/transport/transport.h"
namespace grpc_core {
class ChannelFilter { … };
enum class FilterEndpoint { … };
static constexpr uint8_t kFilterExaminesServerInitialMetadata = …;
static constexpr uint8_t kFilterIsLast = …;
static constexpr uint8_t kFilterExaminesOutboundMessages = …;
static constexpr uint8_t kFilterExaminesInboundMessages = …;
static constexpr uint8_t kFilterExaminesCallContext = …;
namespace promise_filter_detail {
class InvalidChannelFilter : public ChannelFilter { … };
class BaseCallData : public Activity, private Wakeable { … };
class ClientCallData : public BaseCallData { … };
class ServerCallData : public BaseCallData { … };
template <FilterEndpoint endpoint>
class CallData;
template <>
class CallData<FilterEndpoint::kClient> : public ClientCallData { … };
template <>
class CallData<FilterEndpoint::kServer> : public ServerCallData { … };
struct BaseCallDataMethods { … };
template <typename CallData, uint8_t kFlags>
struct CallDataFilterWithFlagsMethods { … };
struct ChannelFilterMethods { … };
template <typename F, uint8_t kFlags>
struct ChannelFilterWithFlagsMethods { … };
}
template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
absl::enable_if_t<std::is_base_of<ChannelFilter, F>::value, grpc_channel_filter>
MakePromiseBasedFilter(const char* name) { … }
}
#endif