|
@@ -626,6 +626,14 @@ static bool uint32wrapper_handler(void* closure, const void* hd, uint32_t val) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+static void* startstringwrapper_handler(void* closure, const void* hd,
|
|
|
+ size_t size_hint) {
|
|
|
+ VALUE* rbval = closure;
|
|
|
+ (void)size_hint;
|
|
|
+ *rbval = get_frozen_string(NULL, 0, false);
|
|
|
+ return closure;
|
|
|
+}
|
|
|
+
|
|
|
static size_t stringwrapper_handler(void* closure, const void* hd,
|
|
|
const char* ptr, size_t len,
|
|
|
const upb_bufhandle* handle) {
|
|
@@ -634,6 +642,14 @@ static size_t stringwrapper_handler(void* closure, const void* hd,
|
|
|
return len;
|
|
|
}
|
|
|
|
|
|
+static void* startbyteswrapper_handler(void* closure, const void* hd,
|
|
|
+ size_t size_hint) {
|
|
|
+ VALUE* rbval = closure;
|
|
|
+ (void)size_hint;
|
|
|
+ *rbval = get_frozen_string(NULL, 0, true);
|
|
|
+ return closure;
|
|
|
+}
|
|
|
+
|
|
|
static size_t byteswrapper_handler(void* closure, const void* hd,
|
|
|
const char* ptr, size_t len,
|
|
|
const upb_bufhandle* handle) {
|
|
@@ -760,9 +776,11 @@ static void add_handlers_for_wrapper(const upb_msgdef* msgdef,
|
|
|
upb_handlers_setuint32(h, f, uint32wrapper_handler, NULL);
|
|
|
break;
|
|
|
case UPB_WELLKNOWN_STRINGVALUE:
|
|
|
+ upb_handlers_setstartstr(h, f, startstringwrapper_handler, NULL);
|
|
|
upb_handlers_setstring(h, f, stringwrapper_handler, NULL);
|
|
|
break;
|
|
|
case UPB_WELLKNOWN_BYTESVALUE:
|
|
|
+ upb_handlers_setstartstr(h, f, startbyteswrapper_handler, NULL);
|
|
|
upb_handlers_setstring(h, f, byteswrapper_handler, NULL);
|
|
|
break;
|
|
|
case UPB_WELLKNOWN_BOOLVALUE:
|