Skip to content
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

Optional fields encode when set #186

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

dysonreturns
Copy link

When setting defaults on non-optional fields, it's fine to leave them out when encoding.
For example, setting false on non-optional boolean or 0(zero) on a numeric should not encode them.
This is how the library currently works. Perfect.

Conversely, when setting a value on an optional field, even if it's the default (0 on numerics, false on booleans), it should always encode the value and not leave it blank.
Only when optional does not have an explicit value set, is it fine we leave it empty.

Fixes #185

Given the message:
message Color {
    optional uint32 r = 1;
    optional uint32 g = 2;
    optional uint32 b = 3;
}
Color.new(r: 0, g: 0, b: 0).to_proto should produce "\b\x00\x10\x00\x18\x00" instead of "\b\x10\x18". Matches official google lib.
@dysonreturns
Copy link
Author

Verified VARINT,I64,I32 + Enums to produce the same as the official Google library.

Checked by hand too, but need someone smarter than me to review carefully.

The benchmark script isn't working for me anymore, but i doubt this'll add too much of a knock.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

zero numerics on optional fields are not encoded
1 participant