|
|
@ -77,7 +77,7 @@ void MessageNew(Context<Descriptor> msg) { |
|
|
|
|
|
|
|
|
|
|
|
case Kernel::kUpb: |
|
|
|
case Kernel::kUpb: |
|
|
|
msg.Emit({{"new_thunk", Thunk(msg, "new")}}, R"rs( |
|
|
|
msg.Emit({{"new_thunk", Thunk(msg, "new")}}, R"rs( |
|
|
|
let arena = unsafe { $pbi$::Arena::new() }; |
|
|
|
let arena = $pbi$::Arena::new(); |
|
|
|
Self { |
|
|
|
Self { |
|
|
|
msg: unsafe { $new_thunk$(arena.raw()) }, |
|
|
|
msg: unsafe { $new_thunk$(arena.raw()) }, |
|
|
|
arena, |
|
|
|
arena, |
|
|
@ -133,9 +133,24 @@ void MessageDeserialize(Context<Descriptor> msg) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
case Kernel::kUpb: |
|
|
|
case Kernel::kUpb: |
|
|
|
msg.Emit(R"rs( |
|
|
|
msg.Emit({{"deserialize_thunk", Thunk(msg, "parse")}}, R"rs( |
|
|
|
let _ = data; |
|
|
|
let arena = $pbi$::Arena::new(); |
|
|
|
$std$::unimplemented!() |
|
|
|
let msg = unsafe { |
|
|
|
|
|
|
|
$NonNull$::<u8>::new( |
|
|
|
|
|
|
|
$deserialize_thunk$(data.as_ptr(), data.len(), arena.raw()) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
match msg { |
|
|
|
|
|
|
|
None => Err($pb$::ParseError), |
|
|
|
|
|
|
|
Some(msg) => { |
|
|
|
|
|
|
|
// This assignment causes self.arena to be dropped and to deallocate
|
|
|
|
|
|
|
|
// any previous message pointed/owned to by self.msg.
|
|
|
|
|
|
|
|
self.arena = arena; |
|
|
|
|
|
|
|
self.msg = msg; |
|
|
|
|
|
|
|
Ok(()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
)rs"); |
|
|
|
)rs"); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
@ -166,10 +181,12 @@ void MessageExterns(Context<Descriptor> msg) { |
|
|
|
{ |
|
|
|
{ |
|
|
|
{"new_thunk", Thunk(msg, "new")}, |
|
|
|
{"new_thunk", Thunk(msg, "new")}, |
|
|
|
{"serialize_thunk", Thunk(msg, "serialize")}, |
|
|
|
{"serialize_thunk", Thunk(msg, "serialize")}, |
|
|
|
|
|
|
|
{"deserialize_thunk", Thunk(msg, "parse")}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
R"rs( |
|
|
|
R"rs( |
|
|
|
fn $new_thunk$(arena: $pbi$::RawArena) -> $NonNull$<u8>; |
|
|
|
fn $new_thunk$(arena: $pbi$::RawArena) -> $NonNull$<u8>; |
|
|
|
fn $serialize_thunk$(msg: $NonNull$<u8>, arena: $pbi$::RawArena, len: &mut usize) -> $NonNull$<u8>; |
|
|
|
fn $serialize_thunk$(msg: $NonNull$<u8>, arena: $pbi$::RawArena, len: &mut usize) -> $NonNull$<u8>; |
|
|
|
|
|
|
|
fn $deserialize_thunk$(data: *const u8, size: usize, arena: $pbi$::RawArena) -> *mut u8; |
|
|
|
)rs"); |
|
|
|
)rs"); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|