Skip to content

Optional fields encode when set - #186

Open
dysonreturns wants to merge 7 commits into
Shopify:mainfrom
dysonreturns:optional-encodes-when-set
Open

Optional fields encode when set#186
dysonreturns wants to merge 7 commits into
Shopify:mainfrom
dysonreturns:optional-encodes-when-set

Conversation

@dysonreturns

Copy link
Copy Markdown

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
Copy Markdown
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