[Rust] Support deserialize by populate passed mut ref
- Dominant language
- Java
- Stars
- 4.5k
- Forks
- 443
- Avg merge
- 5h 59m
- Merged PRs (30d)
- 77
Description
### Feature Request
Currently fory rust provide following deserialize API:
```rust
pub fn deserialize(&self, bf: &[u8]) -> Result {
let mut reader = Reader::new(bf);
let meta_offset = self.read_head(&mut reader)?;
let mut context = ReadContext::new(self, reader);
if meta_offset > 0 {
context.load_meta(meta_offset as usize);
}
::deserialize(&mut context)
}
```
It relies on compiler `Return Value Optimization (RVO)`, which won't work always. And the compiler will copy small struct always.
### Is your feature request related to a problem? Please describe
` pub fn deserialize(&self, bf: &[u8]) -> Result` API may introduce extra copy.
### Describe the solution you'd like
Add a new API to populate passed struct directly.
```rust
pub fn deserialize_into(&self, bf: &[u8], output: &mut T) -> Result<(), Error> {
let mut reader = Reader::new(bf);
let meta_offset = self.read_head(&mut reader)?;
let mut context = ReadContext::new(self, reader);
if meta_offset > 0 {
context.load_meta(meta_offset as usize);
}
::deserialize_into(&mut context, output)
}
```
### Describe alternatives you've considered
_No response_
### Additional context
_No response_
Contributor guide
Assessment
This issue has not been assessed yet.