Having these in the impl block with a generic R paramter would make
them unusable, at least without type annotations:
error[E0282]: type annotations needed
--> msg_socket2/src/socket.rs:45:32
|
45 | let mut deserializer = Deserializer::with_reader(bytes.as_slice(), DefaultOptions::new());
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for type parameter `R`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0282`.
Moving these into separate impl blocks, which set the type of the
Deserializer to the return type of the functions, fixes this error.
Break up the config module into one submodule per configuration
option. This commit also changes the default configuration with
the new options system to be varint (the old system still uses
fixint to preserve backwards compatibility).
Adds varint encoding to all numbers, including sequence lengths and enum discriminants. Varints are encoded according to the following scheme
1. If `u < 251`, encode it as a single byte with that value.
2. If `251 <= u < 2**16`, encode it as a literal byte 251, followed by a u16 with value `u`.
3. If `2**16 <= u < 2**32`, encode it as a literal byte 252, followed by a u32 with value `u`.
4. If `2**32 <= u < 2**64`, encode it as a literal byte 253, followed by a u64 with value `u`.
5. If `2**64 <= u < 2**128`, encode it as a literal byte 254, followed by a u128 with value `u`.
Signed integers are first encoded using zigzag format (see docs for details)
Co-authored-by: Maciej Hirsz <maciej.hirsz@gmail.com>
Co-authored-by: Nicole Mazzuca <nicole@strega-nil.co>
Deprecate the old config system and make a refined version of the internal config system public. Doing allows the Serializer/Deserializer to be exposed since all of its generic type parameters are now public.
The default read implementation on slices was not generating efficient code. This custom implementation generates much smaller assembly with fewer function calls.
* add option and config traits
* thread options everywhere
* add WithOtherLimit, WithOtherEndian, and update internal to take advantage of it
* wip
* add rest of the public API and fix tests
* dtolnay feedback
* remove serialized_size_bounded and replace it with a use of config
* remove inline from trait method
* finish documentation and add custom reader support
* minor config_map refactor
* doc changes
* add with_(de)serializer functions and their associated modules
... by utilizing that bincode is not human readable.
Uses the changes in https://github.com/serde-rs/serde/pull/1044 which
allows data formats to report that they are not human readable. This
lets certain types serialize themselves into a more compact form as they
know that the serialized form does not need to be readable.
Closes#215
BREAKING CHANGE
This changes how types serialize themselves if they detect the
`is_human_readable` state.
If we don't do this we end up using the generic read_exact method
which is not necessarily optimal. This is especially when
using a specialized Read implementation to go fast.
See https://github.com/TyOverby/bincode/issues/206
* Remove unneccesary unwrap
* Use a single buffer for reading a char
* Replace while loop with read_exact
* Remove first_byte variable
* Use read_exact to avoid waiting for data after EOF
* Create error in a closure
While introducing selectable endianness in
https://github.com/TyOverby/bincode/pull/103 , the new type parameter
has been hidden from the public `serialize()`, `deserialize()` etc.
functions, and only made available through an alternate API entry point.
The same kind of encapsulation also needs to be performed for the public
`Serializer` and `Deserializer` types.
* Make Reader and Writer generic on Endianness
* make alternate API modules
* add test asserting that big endian encoding is different from little endian encoding
* clean up tests
* Smarter deserialize_bytes
* Make read_vec faster by pre-allocating the correct amount of space.
Also, call visit_bytes in deserialize_bytes rather than visit_byte_buf.
* Remove rustc_serialize support
* Add changelist and bump version number for alpha
* Move refbox and friends into own module
* update changelog
* update travis config
* move serde functions out into global namespace
* Update to serde_derive
* Fix missing Encoder and Decoder imports
* Add test for serializing bytes
* More efficient serialize_bytes
Reported in #serde: blank_name2 tried serializing
`HashMap<String, HashSet<Bytes>>` vs `HashMap<String, HashSet<&Path>>`,
the `&Path` version was done in ~.6 seconds while the
`&[u8]` one took a full 3 seconds more.
* Delegate emit_enum_struct_variant calls to emit_enum_variant
read_enum_struct_variant delegates calls to read_enum_variant which
expects u32 prefix to encode a variant number. Previous implementation
of emit_enum_struct_variant doesn't emit it, making serialized data
invalid.
* Add test to check manual enum encoding
* Removed unused import warning
* pub use InvalidEncoding in serde+rustc_serialize
* Made both fields of InvalidEncoding public so it can be used without Display or Debug traits (e.g. pattern matching)
* Export of InvalidEncoding in rustc_serialize/serde make them visible in `cargo doc`
* Add cargo features for rustc-serialize and serde
If you only really need one of them
* Check that both "serde" and "rustc-serialize" are compiling
* Minor: change Travis build order