-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
libserialize: tuple-arity should be provided to Decoder::read_tuple
#17595
Conversation
cc @erickt |
bb4ca59
to
a95778e
Compare
Rebased. |
Ping @erickt |
Sorry I missed this. Overall this looks good to me. Could you add a test to make sure json does a sensible thing if there are too many or not enough values to deserialize into a tuple? |
a95778e
to
4151fc7
Compare
Rebased and tests added. |
4151fc7
to
4a468d9
Compare
Rebased and changed |
It's not clear to me whether these test failures are real or an aberration. None of the logs I can see show any failures. |
@danburkert way at the bottom: /Users/rustbuild/src/rust-buildbot/slave/auto-mac-64-opt/build/src/libserialize/json.rs:2156: line longer than 100 chars |
Currently `Decoder` implementations are not provided the tuple arity as a parameter to `read_tuple`. This forces all encoder/decoder combos to serialize the arity along with the elements. Tuple-arity is always known statically at the decode site, because it is part of the type of the tuple, so it could instead be provided as an argument to `read_tuple`, as it is to `read_struct`. The upside to this is that serialized tuples could become smaller in encoder/decoder implementations which choose not to serialize type (arity) information. For example, @TyOverby's [binary-encode](https://github.com/TyOverby/binary-encode) format is currently forced to serialize the tuple-arity along with every tuple, despite the information being statically known at the decode site. A downside to this change is that the tuple-arity of serialized tuples can no longer be automatically checked during deserialization. However, for formats which do serialize the tuple-arity, either explicitly (rbml) or implicitly (json), this check can be added to the `read_tuple` method. The signature of `Deserialize::read_tuple` and `Deserialize::read_tuple_struct` are changed, and thus binary backwards-compatibility is broken. This change does *not* force serialization formats to change, and thus does not break decoding values serialized prior to this change. [breaking-change]
4a468d9
to
05f6bda
Compare
Rebased and line length issue fixed. |
…=alexcrichton Currently `Decoder` implementations are not provided the tuple arity as a parameter to `read_tuple`. This forces all encoder/decoder combos to serialize the arity along with the elements. Tuple-arity is always known statically at the decode site, because it is part of the type of the tuple, so it could instead be provided as an argument to `read_tuple`, as it is to `read_struct`. The upside to this is that serialized tuples could become smaller in encoder/decoder implementations which choose not to serialize type (arity) information. For example, @TyOverby's [binary-encode](https://github.com/TyOverby/binary-encode) format is currently forced to serialize the tuple-arity along with every tuple, despite the information being statically known at the decode site. A downside to this change is that the tuple-arity of serialized tuples can no longer be automatically checked during deserialization. However, for formats which do serialize the tuple-arity, either explicitly (rbml) or implicitly (json), this check can be added to the `read_tuple` method. The signature of `Deserialize::read_tuple` and `Deserialize::read_tuple_struct` are changed, and thus binary backwards-compatibility is broken. This change does *not* force serialization formats to change, and thus does not break decoding values serialized prior to this change. [breaking-change]
Implement lifetime inferring
Currently
Decoder
implementations are not provided the tuple arity asa parameter to
read_tuple
. This forces all encoder/decoder combos toserialize the arity along with the elements. Tuple-arity is always known
statically at the decode site, because it is part of the type of the
tuple, so it could instead be provided as an argument to
read_tuple
,as it is to
read_struct
.The upside to this is that serialized tuples could become smaller in
encoder/decoder implementations which choose not to serialize type
(arity) information. For example, @TyOverby's
binary-encode format is
currently forced to serialize the tuple-arity along with every tuple,
despite the information being statically known at the decode site.
A downside to this change is that the tuple-arity of serialized tuples
can no longer be automatically checked during deserialization. However,
for formats which do serialize the tuple-arity, either explicitly (rbml)
or implicitly (json), this check can be added to the
read_tuple
method.The signature of
Deserialize::read_tuple
andDeserialize::read_tuple_struct
are changed, and thus binarybackwards-compatibility is broken. This change does not force
serialization formats to change, and thus does not break decoding values
serialized prior to this change.
[breaking-change]