refactor(types): attempt to make scalar rkyv::Archive
able
#22961
+227
−26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Signed-off-by: Bugen Zhao i@bugenzhao.comI hereby agree to the terms of the RisingWave Labs, Inc. Contributor License Agreement.
What's changed and what's your intention?
rkyv
is a powerful library that enables zero-copy deserializing for arbitrary Rust types, which seems to be a good solution to #20017.The main idea is, each type will have a corresponding
Archived
type. When a value is serialized into bytes withrkyv
(which still incurs costs), the byte slice can then be directly interpreted as (transmute
d into) a value inArchived
type, with all fields are all in theirArchived
types. TheArchived
types are more like a view to the raw underlying serialized bytes, where we can easily access fields and perform operations just like on the original type.Here's a demo:
https://github.com/BugenZhao/rust-playground/blob/1f42803c5697710aba2ff7980787e16268b62051/src/bin/rkyv_test.rs
Checklist
Documentation
Release note