19 #include <ruby/ruby.h>
78 "grpc_compression_options",
85 #ifdef RUBY_TYPED_FREE_IMMEDIATELY
86 RUBY_TYPED_FREE_IMMEDIATELY
109 VALUE
self, VALUE algorithm_to_disable) {
115 compression_algorithm =
119 compression_algorithm);
128 Check_Type(level_name, T_SYMBOL);
142 rb_raise(rb_eArgError,
143 "Unrecognized compression level name."
144 "Valid compression level names are none, low, medium, and high.");
156 options->default_level.is_set = 1;
166 VALUE algorithm_name_as_string = Qnil;
168 Check_Type(algorithm_name, T_SYMBOL);
172 algorithm_name_as_string = rb_funcall(algorithm_name, rb_intern(
"to_s"), 0);
176 RSTRING_LEN(algorithm_name_as_string));
183 char* error_message_str = NULL;
184 VALUE error_message_ruby_str = Qnil;
186 "Invalid compression algorithm name: %s",
187 name_slice_str) != -1);
189 error_message_ruby_str =
190 rb_str_new(error_message_str, strlen(error_message_str));
192 rb_raise(rb_eNameError,
"%s", StringValueCStr(error_message_ruby_str));
201 VALUE algorithm_name) {
208 &internal_algorithm_value, algorithm_name);
211 internal_algorithm_value)) {
222 &
options->default_algorithm.algorithm, algorithm_name);
223 options->default_algorithm.is_set = 1;
234 &internal_algorithm_value, algorithm_name);
236 internal_algorithm_value);
244 VALUE channel_arg_hash = rb_hash_new();
257 rb_hash_aset(channel_arg_hash,
key,
value);
263 rb_hash_aset(channel_arg_hash,
key,
value);
268 rb_hash_aset(channel_arg_hash,
key,
value);
270 return channel_arg_hash;
277 switch (compression_value) {
289 "Failed to convert compression level value to name for value: %d",
290 (
int)compression_value);
300 char* algorithm_name = NULL;
303 rb_raise(rb_eArgError,
"Failed to convert algorithm value to name");
306 return ID2SYM(rb_intern(algorithm_name));
349 VALUE disabled_algorithms = rb_ary_new();
360 rb_ary_push(disabled_algorithms,
365 return disabled_algorithms;
381 VALUE default_algorithm = Qnil;
382 VALUE default_level = Qnil;
383 VALUE disabled_algorithms = Qnil;
384 VALUE algorithm_name = Qnil;
385 VALUE hash_arg = Qnil;
387 rb_scan_args(argc, argv,
"01", &hash_arg);
391 if (hash_arg == Qnil) {
393 }
else if (
TYPE(hash_arg) != T_HASH || argc > 1) {
394 rb_raise(rb_eArgError,
395 "Invalid arguments. Expecting optional hash parameter");
403 rb_hash_aref(hash_arg, ID2SYM(rb_intern(
"default_algorithm")));
404 if (default_algorithm != Qnil) {
410 default_level = rb_hash_aref(hash_arg, ID2SYM(rb_intern(
"default_level")));
411 if (default_level != Qnil) {
417 disabled_algorithms =
418 rb_hash_aref(hash_arg, ID2SYM(rb_intern(
"disabled_algorithms")));
419 if (disabled_algorithms != Qnil) {
420 Check_Type(disabled_algorithms, T_ARRAY);
422 for (
int i = 0;
i < RARRAY_LEN(disabled_algorithms);
i++) {
423 algorithm_name = rb_ary_entry(disabled_algorithms,
i);