google-protobuf 4.26.1-x86_64-darwin → 4.27.0.rc.1-x86_64-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of google-protobuf might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/ext/google/protobuf_c/defs.c +327 -1
- data/ext/google/protobuf_c/glue.c +16 -0
- data/ext/google/protobuf_c/message.c +4 -15
- data/ext/google/protobuf_c/message.h +0 -4
- data/ext/google/protobuf_c/ruby-upb.c +1200 -279
- data/ext/google/protobuf_c/ruby-upb.h +1164 -809
- data/ext/google/protobuf_c/shared_convert.c +5 -2
- data/ext/google/protobuf_c/shared_message.c +0 -30
- data/ext/google/protobuf_c/shared_message.h +0 -4
- data/lib/google/2.7/protobuf_c.bundle +0 -0
- data/lib/google/3.0/protobuf_c.bundle +0 -0
- data/lib/google/3.1/protobuf_c.bundle +0 -0
- data/lib/google/3.2/protobuf_c.bundle +0 -0
- data/lib/google/3.3/protobuf_c.bundle +0 -0
- data/lib/google/protobuf/descriptor_pb.rb +2 -1
- data/lib/google/protobuf/ffi/descriptor.rb +3 -1
- data/lib/google/protobuf/ffi/descriptor_pool.rb +3 -1
- data/lib/google/protobuf/ffi/enum_descriptor.rb +3 -1
- data/lib/google/protobuf/ffi/ffi.rb +0 -5
- data/lib/google/protobuf/ffi/field_descriptor.rb +4 -2
- data/lib/google/protobuf/ffi/file_descriptor.rb +3 -1
- data/lib/google/protobuf/ffi/internal/convert.rb +1 -1
- data/lib/google/protobuf/ffi/method_descriptor.rb +114 -0
- data/lib/google/protobuf/ffi/oneof_descriptor.rb +3 -1
- data/lib/google/protobuf/ffi/service_descriptor.rb +107 -0
- data/lib/google/protobuf/repeated_field.rb +3 -3
- data/lib/google/protobuf_ffi.rb +2 -0
- metadata +21 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 562b1b62520dd348b0afcd124e76cd2510d45afdd5a4d86f4916d9f06898cb80
|
4
|
+
data.tar.gz: bbb20c7907442b40fcc586b54532c53972a927f00ac17286763f76b738a84505
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 462de842ee418f73250fd4dfc8ef764a8c45e0cf12643a23c44930d9b77597e312367c4a9bdc651005e5e9abc14aebd1a009340e779ad2fcee44f737858ebc08
|
7
|
+
data.tar.gz: 62c5553de4ea6f275c1767b3c3b55d93713aa1937b66b404d407764ed175bcee09f158c0f90f3d3c5947b1a8c9041caa90eaaf7be09b58b52981d683ab224105
|
@@ -23,6 +23,9 @@ static VALUE get_enumdef_obj(VALUE descriptor_pool, const upb_EnumDef* def);
|
|
23
23
|
static VALUE get_fielddef_obj(VALUE descriptor_pool, const upb_FieldDef* def);
|
24
24
|
static VALUE get_filedef_obj(VALUE descriptor_pool, const upb_FileDef* def);
|
25
25
|
static VALUE get_oneofdef_obj(VALUE descriptor_pool, const upb_OneofDef* def);
|
26
|
+
static VALUE get_servicedef_obj(VALUE descriptor_pool,
|
27
|
+
const upb_ServiceDef* def);
|
28
|
+
static VALUE get_methoddef_obj(VALUE descriptor_pool, const upb_MethodDef* def);
|
26
29
|
|
27
30
|
// A distinct object that is not accessible from Ruby. We use this as a
|
28
31
|
// constructor argument to enforce that certain objects cannot be created from
|
@@ -153,6 +156,7 @@ static VALUE DescriptorPool_lookup(VALUE _self, VALUE name) {
|
|
153
156
|
const upb_MessageDef* msgdef;
|
154
157
|
const upb_EnumDef* enumdef;
|
155
158
|
const upb_FieldDef* fielddef;
|
159
|
+
const upb_ServiceDef* servicedef;
|
156
160
|
|
157
161
|
msgdef = upb_DefPool_FindMessageByName(self->symtab, name_str);
|
158
162
|
if (msgdef) {
|
@@ -169,6 +173,11 @@ static VALUE DescriptorPool_lookup(VALUE _self, VALUE name) {
|
|
169
173
|
return get_enumdef_obj(_self, enumdef);
|
170
174
|
}
|
171
175
|
|
176
|
+
servicedef = upb_DefPool_FindServiceByName(self->symtab, name_str);
|
177
|
+
if (servicedef) {
|
178
|
+
return get_servicedef_obj(_self, servicedef);
|
179
|
+
}
|
180
|
+
|
172
181
|
return Qnil;
|
173
182
|
}
|
174
183
|
|
@@ -257,7 +266,20 @@ static VALUE decode_options(VALUE self, const char* option_type, int size,
|
|
257
266
|
VALUE desc_rb = get_msgdef_obj(descriptor_pool, msgdef);
|
258
267
|
const Descriptor* desc = ruby_to_Descriptor(desc_rb);
|
259
268
|
|
260
|
-
options_rb = Message_decode_bytes(size, bytes, 0, desc->klass,
|
269
|
+
options_rb = Message_decode_bytes(size, bytes, 0, desc->klass, false);
|
270
|
+
|
271
|
+
// Strip features from the options proto to keep it internal.
|
272
|
+
const upb_MessageDef* decoded_desc = NULL;
|
273
|
+
upb_Message* options = Message_GetMutable(options_rb, &decoded_desc);
|
274
|
+
PBRUBY_ASSERT(options != NULL);
|
275
|
+
PBRUBY_ASSERT(decoded_desc == msgdef);
|
276
|
+
const upb_FieldDef* field =
|
277
|
+
upb_MessageDef_FindFieldByName(decoded_desc, "features");
|
278
|
+
PBRUBY_ASSERT(field != NULL);
|
279
|
+
upb_Message_ClearFieldByDef(options, field);
|
280
|
+
|
281
|
+
Message_freeze(options_rb);
|
282
|
+
|
261
283
|
rb_ivar_set(self, options_instancevar_interned, options_rb);
|
262
284
|
return options_rb;
|
263
285
|
}
|
@@ -1294,6 +1316,298 @@ static void EnumDescriptor_register(VALUE module) {
|
|
1294
1316
|
cEnumDescriptor = klass;
|
1295
1317
|
}
|
1296
1318
|
|
1319
|
+
// -----------------------------------------------------------------------------
|
1320
|
+
// ServiceDescriptor
|
1321
|
+
// -----------------------------------------------------------------------------
|
1322
|
+
|
1323
|
+
typedef struct {
|
1324
|
+
const upb_ServiceDef* servicedef;
|
1325
|
+
// IMPORTANT: WB_PROTECTED objects must only use the RB_OBJ_WRITE()
|
1326
|
+
// macro to update VALUE references, as to trigger write barriers.
|
1327
|
+
VALUE module; // begins as nil
|
1328
|
+
VALUE descriptor_pool; // Owns the upb_ServiceDef.
|
1329
|
+
} ServiceDescriptor;
|
1330
|
+
|
1331
|
+
static VALUE cServiceDescriptor = Qnil;
|
1332
|
+
|
1333
|
+
static void ServiceDescriptor_mark(void* _self) {
|
1334
|
+
ServiceDescriptor* self = _self;
|
1335
|
+
rb_gc_mark(self->module);
|
1336
|
+
rb_gc_mark(self->descriptor_pool);
|
1337
|
+
}
|
1338
|
+
|
1339
|
+
static const rb_data_type_t ServiceDescriptor_type = {
|
1340
|
+
"Google::Protobuf::ServicDescriptor",
|
1341
|
+
{ServiceDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
|
1342
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
|
1343
|
+
};
|
1344
|
+
|
1345
|
+
static ServiceDescriptor* ruby_to_ServiceDescriptor(VALUE val) {
|
1346
|
+
ServiceDescriptor* ret;
|
1347
|
+
TypedData_Get_Struct(val, ServiceDescriptor, &ServiceDescriptor_type, ret);
|
1348
|
+
return ret;
|
1349
|
+
}
|
1350
|
+
|
1351
|
+
static VALUE ServiceDescriptor_alloc(VALUE klass) {
|
1352
|
+
ServiceDescriptor* self = ALLOC(ServiceDescriptor);
|
1353
|
+
VALUE ret = TypedData_Wrap_Struct(klass, &ServiceDescriptor_type, self);
|
1354
|
+
self->servicedef = NULL;
|
1355
|
+
self->module = Qnil;
|
1356
|
+
self->descriptor_pool = Qnil;
|
1357
|
+
return ret;
|
1358
|
+
}
|
1359
|
+
|
1360
|
+
/*
|
1361
|
+
* call-seq:
|
1362
|
+
* ServiceDescriptor.new(c_only_cookie, ptr) => ServiceDescriptor
|
1363
|
+
*
|
1364
|
+
* Creates a descriptor wrapper object. May only be called from C.
|
1365
|
+
*/
|
1366
|
+
static VALUE ServiceDescriptor_initialize(VALUE _self, VALUE cookie,
|
1367
|
+
VALUE descriptor_pool, VALUE ptr) {
|
1368
|
+
ServiceDescriptor* self = ruby_to_ServiceDescriptor(_self);
|
1369
|
+
|
1370
|
+
if (cookie != c_only_cookie) {
|
1371
|
+
rb_raise(rb_eRuntimeError,
|
1372
|
+
"Descriptor objects may not be created from Ruby.");
|
1373
|
+
}
|
1374
|
+
|
1375
|
+
RB_OBJ_WRITE(_self, &self->descriptor_pool, descriptor_pool);
|
1376
|
+
self->servicedef = (const upb_ServiceDef*)NUM2ULL(ptr);
|
1377
|
+
|
1378
|
+
return Qnil;
|
1379
|
+
}
|
1380
|
+
|
1381
|
+
/*
|
1382
|
+
* call-seq:
|
1383
|
+
* ServiceDescriptor.name => name
|
1384
|
+
*
|
1385
|
+
* Returns the name of this service.
|
1386
|
+
*/
|
1387
|
+
static VALUE ServiceDescriptor_name(VALUE _self) {
|
1388
|
+
ServiceDescriptor* self = ruby_to_ServiceDescriptor(_self);
|
1389
|
+
return rb_str_maybe_null(upb_ServiceDef_FullName(self->servicedef));
|
1390
|
+
}
|
1391
|
+
|
1392
|
+
/*
|
1393
|
+
* call-seq:
|
1394
|
+
* ServiceDescriptor.file_descriptor
|
1395
|
+
*
|
1396
|
+
* Returns the FileDescriptor object this service belongs to.
|
1397
|
+
*/
|
1398
|
+
static VALUE ServiceDescriptor_file_descriptor(VALUE _self) {
|
1399
|
+
ServiceDescriptor* self = ruby_to_ServiceDescriptor(_self);
|
1400
|
+
return get_filedef_obj(self->descriptor_pool,
|
1401
|
+
upb_ServiceDef_File(self->servicedef));
|
1402
|
+
}
|
1403
|
+
|
1404
|
+
/*
|
1405
|
+
* call-seq:
|
1406
|
+
* ServiceDescriptor.each(&block)
|
1407
|
+
*
|
1408
|
+
* Iterates over methods in this service, yielding to the block on each one.
|
1409
|
+
*/
|
1410
|
+
static VALUE ServiceDescriptor_each(VALUE _self) {
|
1411
|
+
ServiceDescriptor* self = ruby_to_ServiceDescriptor(_self);
|
1412
|
+
|
1413
|
+
int n = upb_ServiceDef_MethodCount(self->servicedef);
|
1414
|
+
for (int i = 0; i < n; i++) {
|
1415
|
+
const upb_MethodDef* method = upb_ServiceDef_Method(self->servicedef, i);
|
1416
|
+
VALUE obj = get_methoddef_obj(self->descriptor_pool, method);
|
1417
|
+
rb_yield(obj);
|
1418
|
+
}
|
1419
|
+
return Qnil;
|
1420
|
+
}
|
1421
|
+
|
1422
|
+
/*
|
1423
|
+
* call-seq:
|
1424
|
+
* ServiceDescriptor.options => options
|
1425
|
+
*
|
1426
|
+
* Returns the `ServiceOptions` for this `ServiceDescriptor`.
|
1427
|
+
*/
|
1428
|
+
static VALUE ServiceDescriptor_options(VALUE _self) {
|
1429
|
+
ServiceDescriptor* self = ruby_to_ServiceDescriptor(_self);
|
1430
|
+
const google_protobuf_ServiceOptions* opts =
|
1431
|
+
upb_ServiceDef_Options(self->servicedef);
|
1432
|
+
upb_Arena* arena = upb_Arena_New();
|
1433
|
+
size_t size;
|
1434
|
+
char* serialized =
|
1435
|
+
google_protobuf_ServiceOptions_serialize(opts, arena, &size);
|
1436
|
+
VALUE service_options = decode_options(_self, "ServiceOptions", size,
|
1437
|
+
serialized, self->descriptor_pool);
|
1438
|
+
upb_Arena_Free(arena);
|
1439
|
+
return service_options;
|
1440
|
+
}
|
1441
|
+
|
1442
|
+
static void ServiceDescriptor_register(VALUE module) {
|
1443
|
+
VALUE klass = rb_define_class_under(module, "ServiceDescriptor", rb_cObject);
|
1444
|
+
rb_define_alloc_func(klass, ServiceDescriptor_alloc);
|
1445
|
+
rb_define_method(klass, "initialize", ServiceDescriptor_initialize, 3);
|
1446
|
+
rb_define_method(klass, "name", ServiceDescriptor_name, 0);
|
1447
|
+
rb_define_method(klass, "each", ServiceDescriptor_each, 0);
|
1448
|
+
rb_define_method(klass, "file_descriptor", ServiceDescriptor_file_descriptor,
|
1449
|
+
0);
|
1450
|
+
rb_define_method(klass, "options", ServiceDescriptor_options, 0);
|
1451
|
+
rb_include_module(klass, rb_mEnumerable);
|
1452
|
+
rb_gc_register_address(&cServiceDescriptor);
|
1453
|
+
cServiceDescriptor = klass;
|
1454
|
+
}
|
1455
|
+
|
1456
|
+
// -----------------------------------------------------------------------------
|
1457
|
+
// MethodDescriptor
|
1458
|
+
// -----------------------------------------------------------------------------
|
1459
|
+
|
1460
|
+
typedef struct {
|
1461
|
+
const upb_MethodDef* methoddef;
|
1462
|
+
// IMPORTANT: WB_PROTECTED objects must only use the RB_OBJ_WRITE()
|
1463
|
+
// macro to update VALUE references, as to trigger write barriers.
|
1464
|
+
VALUE module; // begins as nil
|
1465
|
+
VALUE descriptor_pool; // Owns the upb_MethodDef.
|
1466
|
+
} MethodDescriptor;
|
1467
|
+
|
1468
|
+
static VALUE cMethodDescriptor = Qnil;
|
1469
|
+
|
1470
|
+
static void MethodDescriptor_mark(void* _self) {
|
1471
|
+
MethodDescriptor* self = _self;
|
1472
|
+
rb_gc_mark(self->module);
|
1473
|
+
rb_gc_mark(self->descriptor_pool);
|
1474
|
+
}
|
1475
|
+
|
1476
|
+
static const rb_data_type_t MethodDescriptor_type = {
|
1477
|
+
"Google::Protobuf::MethodDescriptor",
|
1478
|
+
{MethodDescriptor_mark, RUBY_DEFAULT_FREE, NULL},
|
1479
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
|
1480
|
+
};
|
1481
|
+
|
1482
|
+
static MethodDescriptor* ruby_to_MethodDescriptor(VALUE val) {
|
1483
|
+
MethodDescriptor* ret;
|
1484
|
+
TypedData_Get_Struct(val, MethodDescriptor, &MethodDescriptor_type, ret);
|
1485
|
+
return ret;
|
1486
|
+
}
|
1487
|
+
|
1488
|
+
static VALUE MethodDescriptor_alloc(VALUE klass) {
|
1489
|
+
MethodDescriptor* self = ALLOC(MethodDescriptor);
|
1490
|
+
VALUE ret = TypedData_Wrap_Struct(klass, &MethodDescriptor_type, self);
|
1491
|
+
self->methoddef = NULL;
|
1492
|
+
self->module = Qnil;
|
1493
|
+
self->descriptor_pool = Qnil;
|
1494
|
+
return ret;
|
1495
|
+
}
|
1496
|
+
|
1497
|
+
/*
|
1498
|
+
* call-seq:
|
1499
|
+
* MethodDescriptor.new(c_only_cookie, ptr) => MethodDescriptor
|
1500
|
+
*
|
1501
|
+
* Creates a descriptor wrapper object. May only be called from C.
|
1502
|
+
*/
|
1503
|
+
static VALUE MethodDescriptor_initialize(VALUE _self, VALUE cookie,
|
1504
|
+
VALUE descriptor_pool, VALUE ptr) {
|
1505
|
+
MethodDescriptor* self = ruby_to_MethodDescriptor(_self);
|
1506
|
+
|
1507
|
+
if (cookie != c_only_cookie) {
|
1508
|
+
rb_raise(rb_eRuntimeError,
|
1509
|
+
"Descriptor objects may not be created from Ruby.");
|
1510
|
+
}
|
1511
|
+
|
1512
|
+
RB_OBJ_WRITE(_self, &self->descriptor_pool, descriptor_pool);
|
1513
|
+
self->methoddef = (const upb_ServiceDef*)NUM2ULL(ptr);
|
1514
|
+
|
1515
|
+
return Qnil;
|
1516
|
+
}
|
1517
|
+
|
1518
|
+
/*
|
1519
|
+
* call-seq:
|
1520
|
+
* MethodDescriptor.name => name
|
1521
|
+
*
|
1522
|
+
* Returns the name of this method
|
1523
|
+
*/
|
1524
|
+
static VALUE MethodDescriptor_name(VALUE _self) {
|
1525
|
+
MethodDescriptor* self = ruby_to_MethodDescriptor(_self);
|
1526
|
+
return rb_str_maybe_null(upb_MethodDef_Name(self->methoddef));
|
1527
|
+
}
|
1528
|
+
|
1529
|
+
/*
|
1530
|
+
* call-seq:
|
1531
|
+
* MethodDescriptor.options => options
|
1532
|
+
*
|
1533
|
+
* Returns the `MethodOptions` for this `MethodDescriptor`.
|
1534
|
+
*/
|
1535
|
+
static VALUE MethodDescriptor_options(VALUE _self) {
|
1536
|
+
MethodDescriptor* self = ruby_to_MethodDescriptor(_self);
|
1537
|
+
const google_protobuf_MethodOptions* opts =
|
1538
|
+
upb_MethodDef_Options(self->methoddef);
|
1539
|
+
upb_Arena* arena = upb_Arena_New();
|
1540
|
+
size_t size;
|
1541
|
+
char* serialized =
|
1542
|
+
google_protobuf_MethodOptions_serialize(opts, arena, &size);
|
1543
|
+
VALUE method_options = decode_options(_self, "MethodOptions", size,
|
1544
|
+
serialized, self->descriptor_pool);
|
1545
|
+
upb_Arena_Free(arena);
|
1546
|
+
return method_options;
|
1547
|
+
}
|
1548
|
+
|
1549
|
+
/*
|
1550
|
+
* call-seq:
|
1551
|
+
* MethodDescriptor.input_type => Descriptor
|
1552
|
+
*
|
1553
|
+
* Returns the `Descriptor` for the request message type of this method
|
1554
|
+
*/
|
1555
|
+
static VALUE MethodDescriptor_input_type(VALUE _self) {
|
1556
|
+
MethodDescriptor* self = ruby_to_MethodDescriptor(_self);
|
1557
|
+
const upb_MessageDef* type = upb_MethodDef_InputType(self->methoddef);
|
1558
|
+
return get_msgdef_obj(self->descriptor_pool, type);
|
1559
|
+
}
|
1560
|
+
|
1561
|
+
/*
|
1562
|
+
* call-seq:
|
1563
|
+
* MethodDescriptor.output_type => Descriptor
|
1564
|
+
*
|
1565
|
+
* Returns the `Descriptor` for the response message type of this method
|
1566
|
+
*/
|
1567
|
+
static VALUE MethodDescriptor_output_type(VALUE _self) {
|
1568
|
+
MethodDescriptor* self = ruby_to_MethodDescriptor(_self);
|
1569
|
+
const upb_MessageDef* type = upb_MethodDef_OutputType(self->methoddef);
|
1570
|
+
return get_msgdef_obj(self->descriptor_pool, type);
|
1571
|
+
}
|
1572
|
+
|
1573
|
+
/*
|
1574
|
+
* call-seq:
|
1575
|
+
* MethodDescriptor.client_streaming => bool
|
1576
|
+
*
|
1577
|
+
* Returns whether or not this is a streaming request method
|
1578
|
+
*/
|
1579
|
+
static VALUE MethodDescriptor_client_streaming(VALUE _self) {
|
1580
|
+
MethodDescriptor* self = ruby_to_MethodDescriptor(_self);
|
1581
|
+
return upb_MethodDef_ClientStreaming(self->methoddef) ? Qtrue : Qfalse;
|
1582
|
+
}
|
1583
|
+
|
1584
|
+
/*
|
1585
|
+
* call-seq:
|
1586
|
+
* MethodDescriptor.server_streaming => bool
|
1587
|
+
*
|
1588
|
+
* Returns whether or not this is a streaming response method
|
1589
|
+
*/
|
1590
|
+
static VALUE MethodDescriptor_server_streaming(VALUE _self) {
|
1591
|
+
MethodDescriptor* self = ruby_to_MethodDescriptor(_self);
|
1592
|
+
return upb_MethodDef_ServerStreaming(self->methoddef) ? Qtrue : Qfalse;
|
1593
|
+
}
|
1594
|
+
|
1595
|
+
static void MethodDescriptor_register(VALUE module) {
|
1596
|
+
VALUE klass = rb_define_class_under(module, "MethodDescriptor", rb_cObject);
|
1597
|
+
rb_define_alloc_func(klass, MethodDescriptor_alloc);
|
1598
|
+
rb_define_method(klass, "initialize", MethodDescriptor_initialize, 3);
|
1599
|
+
rb_define_method(klass, "name", MethodDescriptor_name, 0);
|
1600
|
+
rb_define_method(klass, "options", MethodDescriptor_options, 0);
|
1601
|
+
rb_define_method(klass, "input_type", MethodDescriptor_input_type, 0);
|
1602
|
+
rb_define_method(klass, "output_type", MethodDescriptor_output_type, 0);
|
1603
|
+
rb_define_method(klass, "client_streaming", MethodDescriptor_client_streaming,
|
1604
|
+
0);
|
1605
|
+
rb_define_method(klass, "server_streaming", MethodDescriptor_server_streaming,
|
1606
|
+
0);
|
1607
|
+
rb_gc_register_address(&cMethodDescriptor);
|
1608
|
+
cMethodDescriptor = klass;
|
1609
|
+
}
|
1610
|
+
|
1297
1611
|
static VALUE get_def_obj(VALUE _descriptor_pool, const void* ptr, VALUE klass) {
|
1298
1612
|
DescriptorPool* descriptor_pool = ruby_to_DescriptorPool(_descriptor_pool);
|
1299
1613
|
VALUE key = ULL2NUM((intptr_t)ptr);
|
@@ -1335,6 +1649,16 @@ static VALUE get_oneofdef_obj(VALUE descriptor_pool, const upb_OneofDef* def) {
|
|
1335
1649
|
return get_def_obj(descriptor_pool, def, cOneofDescriptor);
|
1336
1650
|
}
|
1337
1651
|
|
1652
|
+
static VALUE get_servicedef_obj(VALUE descriptor_pool,
|
1653
|
+
const upb_ServiceDef* def) {
|
1654
|
+
return get_def_obj(descriptor_pool, def, cServiceDescriptor);
|
1655
|
+
}
|
1656
|
+
|
1657
|
+
static VALUE get_methoddef_obj(VALUE descriptor_pool,
|
1658
|
+
const upb_MethodDef* def) {
|
1659
|
+
return get_def_obj(descriptor_pool, def, cMethodDescriptor);
|
1660
|
+
}
|
1661
|
+
|
1338
1662
|
// -----------------------------------------------------------------------------
|
1339
1663
|
// Shared functions
|
1340
1664
|
// -----------------------------------------------------------------------------
|
@@ -1410,6 +1734,8 @@ void Defs_register(VALUE module) {
|
|
1410
1734
|
FieldDescriptor_register(module);
|
1411
1735
|
OneofDescriptor_register(module);
|
1412
1736
|
EnumDescriptor_register(module);
|
1737
|
+
ServiceDescriptor_register(module);
|
1738
|
+
MethodDescriptor_register(module);
|
1413
1739
|
|
1414
1740
|
rb_gc_register_address(&c_only_cookie);
|
1415
1741
|
c_only_cookie = rb_class_new_instance(0, NULL, rb_cObject);
|
@@ -54,3 +54,19 @@ char* FieldDescriptor_serialized_options(const upb_FieldDef* fielddef,
|
|
54
54
|
char* serialized = google_protobuf_FieldOptions_serialize(opts, arena, size);
|
55
55
|
return serialized;
|
56
56
|
}
|
57
|
+
|
58
|
+
char* ServiceDescriptor_serialized_options(const upb_ServiceDef* servicedef,
|
59
|
+
size_t* size, upb_Arena* arena) {
|
60
|
+
const google_protobuf_ServiceOptions* opts =
|
61
|
+
upb_ServiceDef_Options(servicedef);
|
62
|
+
char* serialized =
|
63
|
+
google_protobuf_ServiceOptions_serialize(opts, arena, size);
|
64
|
+
return serialized;
|
65
|
+
}
|
66
|
+
|
67
|
+
char* MethodDescriptor_serialized_options(const upb_MethodDef* methoddef,
|
68
|
+
size_t* size, upb_Arena* arena) {
|
69
|
+
const google_protobuf_MethodOptions* opts = upb_MethodDef_Options(methoddef);
|
70
|
+
char* serialized = google_protobuf_MethodOptions_serialize(opts, arena, size);
|
71
|
+
return serialized;
|
72
|
+
}
|
@@ -669,20 +669,6 @@ static VALUE Message_dup(VALUE _self) {
|
|
669
669
|
return new_msg;
|
670
670
|
}
|
671
671
|
|
672
|
-
// Support function for Message_eq, and also used by other #eq functions.
|
673
|
-
bool Message_Equal(const upb_Message* m1, const upb_Message* m2,
|
674
|
-
const upb_MessageDef* m) {
|
675
|
-
upb_Status status;
|
676
|
-
upb_Status_Clear(&status);
|
677
|
-
bool return_value = shared_Message_Equal(m1, m2, m, &status);
|
678
|
-
if (upb_Status_IsOk(&status)) {
|
679
|
-
return return_value;
|
680
|
-
} else {
|
681
|
-
rb_raise(cParseError, "Message_Equal(): %s",
|
682
|
-
upb_Status_ErrorMessage(&status));
|
683
|
-
}
|
684
|
-
}
|
685
|
-
|
686
672
|
/*
|
687
673
|
* call-seq:
|
688
674
|
* Message.==(other) => boolean
|
@@ -699,7 +685,10 @@ static VALUE Message_eq(VALUE _self, VALUE _other) {
|
|
699
685
|
Message* other = ruby_to_Message(_other);
|
700
686
|
assert(self->msgdef == other->msgdef);
|
701
687
|
|
702
|
-
|
688
|
+
const upb_MiniTable* m = upb_MessageDef_MiniTable(self->msgdef);
|
689
|
+
const int options = 0;
|
690
|
+
return upb_Message_IsEqual(self->msg, other->msg, m, options) ? Qtrue
|
691
|
+
: Qfalse;
|
703
692
|
}
|
704
693
|
|
705
694
|
uint64_t Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
|
@@ -54,10 +54,6 @@ uint64_t Message_Hash(const upb_Message* msg, const upb_MessageDef* m,
|
|
54
54
|
upb_Message* Message_deep_copy(const upb_Message* msg, const upb_MessageDef* m,
|
55
55
|
upb_Arena* arena);
|
56
56
|
|
57
|
-
// Returns true if these two messages are equal.
|
58
|
-
bool Message_Equal(const upb_Message* m1, const upb_Message* m2,
|
59
|
-
const upb_MessageDef* m);
|
60
|
-
|
61
57
|
// Checks that this Ruby object is a message, and raises an exception if not.
|
62
58
|
void Message_CheckClass(VALUE klass);
|
63
59
|
|