From 9a6744b6bffab4b216c29a4ac8f77109c9c1dba9 Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Tue, 2 Jan 2024 09:43:53 -0800
Subject: [PATCH] [call-v3] Convert ServiceConfigChannelArgFilter to new API
 (#35418)

Omitting experiments in this case because the conversion is trivial

Closes #35418

COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35418 from ctiller:scca ae131d81645d2256ae1943c5c55d2592cb134c9e
PiperOrigin-RevId: 595140546
---
 .../service_config_channel_arg_filter.cc      | 42 +++++++++++++------
 1 file changed, 29 insertions(+), 13 deletions(-)

diff --git a/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc b/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc
index 9de7fe2e374..54169fcab06 100644
--- a/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc
+++ b/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc
@@ -54,7 +54,8 @@ namespace grpc_core {
 
 namespace {
 
-class ServiceConfigChannelArgFilter : public ChannelFilter {
+class ServiceConfigChannelArgFilter
+    : public ImplementChannelFilter<ServiceConfigChannelArgFilter> {
  public:
   static absl::StatusOr<ServiceConfigChannelArgFilter> Create(
       const ChannelArgs& args, ChannelFilter::Args) {
@@ -74,28 +75,43 @@ class ServiceConfigChannelArgFilter : public ChannelFilter {
     }
   }
 
-  // Construct a promise for one call.
-  ArenaPromise<ServerMetadataHandle> MakeCallPromise(
-      CallArgs call_args, NextPromiseFactory next_promise_factory) override;
+  class Call {
+   public:
+    void OnClientInitialMetadata(ClientMetadata& md,
+                                 ServiceConfigChannelArgFilter* filter);
+    static const NoInterceptor OnServerInitialMetadata;
+    static const NoInterceptor OnServerTrailingMetadata;
+    static const NoInterceptor OnClientToServerMessage;
+    static const NoInterceptor OnServerToClientMessage;
+    static const NoInterceptor OnFinalize;
+  };
 
  private:
   RefCountedPtr<ServiceConfig> service_config_;
 };
 
-ArenaPromise<ServerMetadataHandle>
-ServiceConfigChannelArgFilter::MakeCallPromise(
-    CallArgs call_args, NextPromiseFactory next_promise_factory) {
+const NoInterceptor
+    ServiceConfigChannelArgFilter::Call::OnServerInitialMetadata;
+const NoInterceptor
+    ServiceConfigChannelArgFilter::Call::OnServerTrailingMetadata;
+const NoInterceptor
+    ServiceConfigChannelArgFilter::Call::OnClientToServerMessage;
+const NoInterceptor
+    ServiceConfigChannelArgFilter::Call::OnServerToClientMessage;
+const NoInterceptor ServiceConfigChannelArgFilter::Call::OnFinalize;
+
+void ServiceConfigChannelArgFilter::Call::OnClientInitialMetadata(
+    ClientMetadata& md, ServiceConfigChannelArgFilter* filter) {
   const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr;
-  if (service_config_ != nullptr) {
-    method_configs = service_config_->GetMethodParsedConfigVector(
-        call_args.client_initial_metadata->get_pointer(HttpPathMetadata())
-            ->c_slice());
+  if (filter->service_config_ != nullptr) {
+    method_configs = filter->service_config_->GetMethodParsedConfigVector(
+        md.get_pointer(HttpPathMetadata())->c_slice());
   }
   auto* arena = GetContext<Arena>();
   auto* service_config_call_data = arena->New<ServiceConfigCallData>(
       arena, GetContext<grpc_call_context_element>());
-  service_config_call_data->SetServiceConfig(service_config_, method_configs);
-  return next_promise_factory(std::move(call_args));
+  service_config_call_data->SetServiceConfig(filter->service_config_,
+                                             method_configs);
 }
 
 const grpc_channel_filter kServiceConfigChannelArgFilter =