diff --git a/src/core/lib/channel/channel_args.cc b/src/core/lib/channel/channel_args.cc index 98fdfa6b9af..66a86c2286d 100644 --- a/src/core/lib/channel/channel_args.cc +++ b/src/core/lib/channel/channel_args.cc @@ -354,6 +354,15 @@ int grpc_channel_arg_get_integer(const grpc_arg* arg, return arg->value.integer; } +char* grpc_channel_arg_get_string(const grpc_arg* arg) { + if (arg == nullptr) return nullptr; + if (arg->type != GRPC_ARG_STRING) { + gpr_log(GPR_ERROR, "%s ignored: it must be an string", arg->key); + return nullptr; + } + return arg->value.string; +} + bool grpc_channel_arg_get_bool(const grpc_arg* arg, bool default_value) { if (arg == nullptr) return default_value; if (arg->type != GRPC_ARG_INTEGER) { diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index 73e9122e750..e2a94781152 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -109,6 +109,10 @@ typedef struct grpc_integer_options { int grpc_channel_arg_get_integer(const grpc_arg* arg, const grpc_integer_options options); +/** Returns the value of \a arg if \a arg is of type GRPC_ARG_STRING. + Otherwise, emits a warning log, and returns nullptr */ +char* grpc_channel_arg_get_string(const grpc_arg* arg); + bool grpc_channel_arg_get_bool(const grpc_arg* arg, bool default_value); // Helpers for creating channel args.