-
Notifications
You must be signed in to change notification settings - Fork 221
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Document that Builders cannot be re-used? #111
Comments
Yep, the |
Does this mean, as appeared to be the case, that a Builder cannot be re-used? If so, is this behaviour deliberate? |
You can reuse a The best way to avoid allocations between messages is to use |
You can get rid of the old values by canonicalizing the message. let reader = builder.get_root_as_reader()?;
let mut compacted_builder = capnp::message::Builder::new_default();
compacted_builder.set_root_canonical(reader)?;
capnp::serialize::write_message(&mut buf, &compacted_builder)?; This probably won't make sense performance-wise for many scenarios, but I figured it out to learn how to update a message without needing to copy old message contents field by field (that would be a maintenance burden, easy to forget to change as schema changes). |
Just plain |
From the documentation, it's unclear if Builders can be re-used. The presence of
init_root()
gives the impression that a Builder can be re-initialized for construction of a new message. Given that one wishes to avoid repeated memory allocations, this seems like an obvious thing to do, but attempting to do so results in increasingly larger messages (presumably all the previous messages concatenated, but I've not checked this in depth).The text was updated successfully, but these errors were encountered: