Commit Graph

332 Commits

Author SHA1 Message Date
Victor Koenders ca353b9882 Added decode_unsigned 2021-09-19 10:53:07 +02:00
Victor Koenders ccca6ee49e Split Error into EncodeError and DecodeError 2021-09-19 10:52:21 +02:00
Victor Koenders 723bdd312a Turned Config::INT_ENCODING back into a const, made a ton of varint_encode functions 2021-09-19 09:25:47 +02:00
Victor Koenders 7448b7bb87 Moved Encoder to its own file 2021-09-19 08:34:14 +02:00
Victor Koenders 6802edc625 Renamed blob to slice 2021-09-19 08:30:28 +02:00
Victor Koenders 8a4eac82fb Made the encoder respect intencoding, implemented FixintEncoding 2021-09-19 08:28:38 +02:00
Victor Koenders bab0cf4bd1 Started working on bincode_derive 2021-09-13 13:20:47 +02:00
Lena Hellström b7c0d1fac0 reorganize de/enc modules 2021-06-20 00:12:10 +02:00
Lena Hellström e160c73acb a fresh new start 2021-06-19 19:31:34 +02:00
Taehyung Lim 0d046e7b0e fix typo (#392) 2021-06-13 13:25:37 -07:00
Lena Hellström e39a047b4b prep branch for 2.0 work (#379)
* prep branch for 2.0 work

* switch to 2018 edition

* fix clippy issues

* fix tests

* fix warnings

* fix formatting
2021-04-08 14:54:31 +02:00
Lena Hellström 810086e473 fix linting ci error (#377) 2021-02-23 12:09:15 -08:00
Manu c1b91d5a74 Fixed a stray comment. (#360) 2021-02-23 05:48:04 -08:00
Andy Goetz 5d6dfa1fb9 Update docs to highlight differences between DefaultOptions and functions (#373)
Due to historical reasons, the default options used by bincode for the
helper functions at the root of the crate differ from the options in
the `config` module.

Changing the default options is a breaking change, so until a decision
is made, we can at least document the current behavior.
2021-02-23 05:33:55 -08:00
luben karavelov 5a134cf991 Fix `WithOtherTrailing` and `WithOtherIntEncoding` (#342)
They should be Copy/Clone as the rest of the Options

Closes #341
2020-07-20 10:22:30 -07:00
Lena Hellström 00c43bf3b1 fix logic error in fill_buffer (#336) 2020-06-23 23:41:55 -07:00
Alyssa Ross 4a57853a3b Fix Deserializer::{from_slice, with_reader} types (#332)
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.
2020-06-23 10:47:00 -07:00
Lena Hellström a822c09d93 bump version to 1.3.0 (#330) 2020-06-04 21:20:43 -07:00
Lena Hellström 752262a03d update documentation to reflect new config options (#329) 2020-06-04 21:20:00 -07:00
Lena Hellström e80f61b9da Reject trailing bytes (#198) 2020-05-26 12:40:04 -07:00
Lena Hellström f9faa33686 refactor config module (#323)
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).
2020-05-18 22:46:12 -07:00
Lena Hellström c27e9c6874 Varint enum tags and lengths (#306)
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>
2020-05-18 17:07:10 -07:00
Lena Hellström 2355e48a7b expose default options and serializers (#310)
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.
2020-04-16 15:23:07 -07:00
Lena Hellström 8839b0600d Modernize CI (#311)
Switches our CI from Travis-CI to Github Actions. At the same time this also turns on clippy and rustfmt linting.
2020-03-24 14:33:13 -07:00
Lena Hellström ae8c162d49 remove unsafe code in IoReader (#309) 2020-03-19 17:46:13 -07:00
Lena Hellström 15379ee5b2 Overoptimize slice reader (#308)
The default read implementation on slices was not generating efficient code. This custom implementation generates much smaller assembly with fewer function calls.
2020-03-18 14:54:54 -07:00
jean-airoldie 4aa2a44965 Added Debug impl to Config 2020-01-23 21:35:00 +00:00
Leonard Kramer 3a3857ff38 Remove dyn 2020-01-23 09:25:41 +00:00
Leonard Kramer c48a064bad Fix compile warnings caused by deprecated macros. 2020-01-23 09:25:41 +00:00
jean-airoldie e2d8742743 Add contraints to {Serializer,Deserializer}Acceptor
This allows the user to retreive concrete types from the
serializer & deserializer output.
2020-01-23 09:23:48 +00:00
Joonatan Saarhelo 237e6852e9 remove unnecessary let in ReadReader 2020-01-21 09:21:43 +00:00
Joonatan Saarhelo 858cee9a22 deduplicate slicing logic SliceReader 2020-01-21 09:21:43 +00:00
Joonatan Saarhelo 28da4dbf56 improve documentation of BincodeRead 2020-01-21 09:21:43 +00:00
David Tolnay 6c4b23ce62 Release 1.2.1 2019-12-09 22:25:24 -08:00
David Tolnay 04cc5ba85f Merge pull request #281 from jstarry/fix-emscripten-builds
Fix emscripten build failures due to lack of i128 support
2019-12-09 22:25:00 -08:00
jean-airoldie a2d54866d4 Added Clone impl to Config 2019-11-04 07:46:43 -05:00
Josh Mcguigan c06b18abed improve safety of fill_buffer - see issue #260 2019-10-30 21:06:56 -04:00
Justin Starry 0215da2d29 Fix emscripten build failures due to lack of i128 support 2019-10-19 19:51:34 -04:00
Josh Matthews 293e9cea32 Release 1.2.0. 2019-09-24 14:16:47 -04:00
Josh Matthews d4d13aa37c Release 1.1.5. 2019-09-23 18:56:44 -04:00
alecmocatta ecbef8d1bb add remaining _seed variants of deserialize functions 2019-09-06 17:38:28 -04:00
David Tolnay 18da2c95d5 Release 1.1.4 2019-05-14 21:16:49 -07:00
David Tolnay 107a1930b5 Update documentation to 2018 edition 2019-04-30 01:18:32 -07:00
David Tolnay c954d3352c Remove unneeded ```rust from rustdoc 2019-04-30 01:15:01 -07:00
David Tolnay 0a67cf66e7 Release 1.1.3 2019-04-07 17:28:48 -07:00
David Tolnay f5af5b992b Define html_root_url 2019-02-16 11:28:17 -08:00
Diggory Hardy a04c750960 Make i128 support automatic for supporting Rustc versions
Uses autocfg
2019-01-28 09:59:18 -05:00
Jeff Muizelaar 20da2c841a Make config() inline(always)
Without this we end up generating code for all configs unless LTO is on.
2018-11-20 11:13:44 -05:00
Ty Overby d8704644d7 format 2018-09-04 16:25:10 -07:00
boxdot 5633935964 Introduce `Config::deserialize_seed` for exposing serde's statefull deser. 2018-09-04 16:22:50 -07:00
Ashley Mannix 2ef9a06894 add support for 128bit numbers 2018-05-30 09:44:38 -07:00
Ty Overby 72f002cc0a some comment fixes 2018-02-13 16:24:57 -08:00
Ty Overby 5081ac7c08 remove unused function type parameter 2018-02-07 20:23:07 -08:00
Ty Overby 24b007e194 public but hidden read types 2018-02-07 20:13:26 -08:00
Ty Overby 3c5b38097f hide with_deserializer and with_serializer 2018-02-07 19:46:25 -08:00
Ty Overby 76b7662dcd move to custom read implementation for deserialize_in_place 2018-02-07 19:39:27 -08:00
Ty Overby 68ca894b81 add deserialize_in_place 2018-02-07 18:32:10 -08:00
Ty Overby b31151a605 2nd implementation of the Config Trait (#214)
* 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
2018-02-07 18:26:46 -08:00
Kyle Huey 093bc24a13 Elide unnecessary copy when consuming a byte buffer. (#223) 2017-12-01 10:26:08 -08:00
Markus Westerlind 7464ba7272 Allow serialized types to use a more compact representation ... (#217)
... 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.
2017-11-20 09:55:34 -08:00
Ty Overby 1cc66df1d5 add documentation to utf8_char_width 2017-10-13 17:58:53 -07:00
Ty Overby 1cf9a0eb56 fix doc comment for deserializing function 2017-10-13 17:48:55 -07:00
Ty Overby 47b66f55ce switched type parameter on deserializer 2017-10-13 17:44:36 -07:00
Ty Overby 251bbe22d4 remove _types from read module 2017-10-13 17:42:09 -07:00
Ty Overby 40889ec016 capitalize Bincode 2017-10-13 17:38:36 -07:00
Ty Overby de942273a0 remove infinite terminology from SequenceMustHaveLength message 2017-10-13 17:32:04 -07:00
Ty Overby 94b3de8f3c remove decding terminology from sizelimit error message 2017-10-13 17:29:44 -07:00
Ty Overby c696aac206 fix mistake 2017-10-13 10:17:58 -07:00
Ty Overby 7dc7a94560 improve size limit error display 2017-10-13 08:59:08 -07:00
Ty Overby 3a24da087b cargo fmt source 2017-10-13 08:57:04 -07:00
Ty Overby c8f02e30aa 177 invalid encodings (#212)
* split out invalid encoding errors

* detail breaking changes
2017-10-12 09:04:14 -07:00
Ty Overby 45e70e297e add ErrorKind::DeserializeAnyNotSupported (#211) 2017-10-11 10:38:35 -07:00
Ty Overby d04ba007dc remove references to old type (#210) 2017-10-11 09:53:45 -07:00
Ty Overby a135fd44dc uncapitalize error messages (#209) 2017-10-11 09:53:36 -07:00
Ty Overby 62941544ea rename doc functions (#208)
* fix up docs
2017-10-10 16:41:27 -07:00
Ty Overby ab70e7d507 remove completely unused dependency 2017-10-10 10:32:18 -07:00
Jeff Muizelaar d033583700 Forward read_exact() as well as read(). (#207)
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
2017-10-10 10:20:34 -07:00
Thomas Schaller f20770a09f Correct error message
Spotted the mistake while skimming over the code.
2017-09-10 17:25:32 +02:00
Lena Hellström 4777efdfaa take reader and writer by value (#200) 2017-07-23 21:58:29 -07:00
Lena Hellström 34aba9acbe Internal type names (#199)
* Remove internal type names from api

* Rename IoReadReader to IoReader
2017-07-23 21:57:53 -07:00
David Tolnay 2f1ab0a0e5 Revert whitespace changes from #194 2017-07-22 13:35:13 -07:00
David Tolnay d44adb148e Correctly report the cause of IO error
This was fixed in #195 but unintentionally reverted in #194.
2017-07-22 13:34:29 -07:00
David Tolnay 815c44287a Merge pull request #194 from dgriffen/io-variant-names 2017-07-22 13:32:46 -07:00
Lena Hellström 18bcfc420e Seal SizeLimit and BincodeRead 2017-07-22 14:37:08 -05:00
Lena Hellström b6dbb08f92 Correctlly report the cause of IoError (#195) 2017-07-20 10:12:36 -07:00
Lena Hellström d55bbf150f Remove naming redundancy with IoError 2017-07-18 21:54:23 -07:00
Ty Overby 8be2e87415 factor out some common functionality 2017-04-20 22:20:56 -07:00
Ty Overby cb7e9f87eb fix buffer length bug 2017-04-20 22:11:28 -07:00
Ty Overby 6692674f43 WIP Implement nocopy support for bincode (#150)
* basic infrastructure

* use BincodeRead internally

* fix zero copy behavior

* rearrange module layout; remove pub(crate)

* add size-limit safety checks when deserializing str or bytes

* fix-up tests
2017-04-20 18:27:22 -07:00
David Tolnay 7eccffd783 Update to serde 1.0 branch (#149)
* Update to serde 1.0 branch

* The serde 1.0 branch merged
2017-04-19 16:05:59 -07:00
Ty Overby b3acb6ea60 remove read_bytes (#143) 2017-03-22 13:08:37 -07:00
Ty Overby c6fa2358e5 add docs to everything that was undocumented 2017-03-20 17:32:55 -07:00
Ty Overby 975f82cfb8 add size_hints 2017-03-20 08:29:26 -07:00
Ty Overby 539637d78b remove refbox (#140) 2017-03-19 20:10:35 -07:00
Ty Overby 2b465047b9 Eager prealloc no inline (#127)
* make SizeLimit a trait

* always preallocate
2017-03-17 18:14:59 -07:00
Ty Overby f4c97fde6a make SizeLimit a trait (#124)
* make SizeLimit a trait

* move inline to the correct location
2017-03-17 17:59:12 -07:00
Ty Overby ed65f9abeb call read_bytes iteratively inside of read_vec (#138) 2017-03-13 09:24:38 -07:00
slyrz 05d1936caf Make read_vec more robust (#134)
* Make read_vec more robust

* Remove check for overflowing add

* Let the two read_vec functions become one again
2017-03-09 11:04:51 -08:00
slyrz 6c3b677dd7 Revamp deserialize_char (#133)
* 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
2017-03-09 11:02:27 -08:00
Olaf Buddenhagen 5784fe28ad Fix unintentional breaking API change in `Serializer`/`Deserializer` (#128)
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.
2017-03-01 17:14:11 -08:00
Ty Overby 1631cb2d80 Make Reader and Writer generic on Endianness (#103)
* 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
2017-02-24 18:58:46 -08:00
Tim 3471118004 Smarter deserialize_bytes and deserialize_byte_buf (#115)
* 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.
2017-02-23 12:31:59 -08:00
Lena Hellström cac9301615 Remove InvalidEncoding struct (#111) 2017-02-10 10:19:58 -08:00
Lena Hellström ffbe4387dd Combine error types (#104)
* Combine error types

* Correct errors from merge conflict

* Create ErrorKind and Box it up

* Fix merge errors.

* Fix merge errors re-adding length encoding.
2017-02-09 23:07:20 -08:00
Lena Hellström 565b9c9f41 Remove length encoding (#102)
* Remove length encoding

* Improve bytes() test.
2017-02-03 09:27:03 -08:00
Lena Hellström 419411d004 Remove sized bounds where appropriate (#101)
* Remove sized bounds where appropriate

* Make bounds compatible with stable
2017-01-31 20:24:08 -08:00
Ty Overby e7a74aa6c2 Remove rustc serialize support (#95)
* 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
2017-01-31 15:50:55 -08:00
Ty Overby 5bfd688819 change error message (#97)
* change error message

* add InfiniteSequence case to SerializeError

* Change name
2017-01-31 12:56:25 -08:00
Lena Hellström ab3f627ca8 Don't panic. (#96) 2017-01-31 11:21:07 -08:00
Lena Hellström c6393ac561 Update to serde 0.9.X (#93)
* Update to serde 0.9.X

* Remove redundant visitor and bad namespacing.

* Change DeserializeError to use Strings.

Reintroduce error tests.

* Better DeserializeError messages.

* Fix warnings.
2017-01-31 09:59:29 -08:00
David Tolnay 3d4346808f More efficient serialize_bytes (#90)
* 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.
2016-12-12 18:26:26 +00:00
Nikita Baksalyar 8d708cd194 Delegate emit_enum_struct_variant calls to emit_enum_variant (#89)
* 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
2016-11-27 13:08:20 -08:00
Brian Bowman e96a3645fa Fix typo in bincode::serde (#88) 2016-09-20 16:03:54 -07:00
David Tolnay 95b414a184 Update to serde 0.8.0 (#84) 2016-07-28 12:23:18 -07:00
Cobrand c5073e83e5 pub used InvalidEncoding in serde+rustc_serialize so it shows in `cargo doc` (#82)
* 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`
2016-07-08 06:53:43 -07:00
Oliver Schneider 2eee182f1f fix char serialization and deserialization 2016-06-30 14:02:07 +02:00
Dmitry e5a524ed28 Fixed size array deserialization (#76)
* Attempt to implement hint for fixed size arrays.

* Removed wrong visitor + tests.

* Removed extra new line.
2016-06-19 13:29:10 -07:00
David Tolnay 629d7bc640 Impl Deserialize for non-'static lifetimes (#79) 2016-06-19 13:23:21 -07:00
Ms2ger c7bdb4a90c Use num-traits. (#72) 2016-04-21 09:28:33 -07:00
Alexander Bulaev ff69e6f3e1 Add cargo features for rustc-serialize and serde (#70)
* 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
2016-04-15 11:03:32 -07:00
Ty Overby 21329a0e53 v0.5.3 2016-04-12 09:28:21 -07:00
Jayson Reis 183c28e363 Upgrade byteorder to 0.5.x (#68) 2016-04-12 09:26:18 -07:00
Brian Bowman 127380a506 fix typo 2016-04-07 03:05:41 -05:00
Ty Overby 772b1da6df Revert "Respect size limits in read_seq and read_map."
This reverts commit 1e21e5d13b.
2016-04-03 15:44:21 -07:00
Andrew Cann ce61edb51f Replace use of saturating_add 2016-03-10 17:27:51 +08:00
Andrew Cann 1e21e5d13b Respect size limits in read_seq and read_map. 2016-03-10 17:08:11 +08:00
Ty Overby bde9aa6565 add initial support for serde 0.7 2016-03-04 10:44:28 -08:00
Ty Overby 3e8833b70e Fix typo 2016-02-07 17:42:45 -08:00
Ty Overby 9824d8061c ignore instead of no_run 2016-02-07 17:03:47 -08:00
Ty Overby 7fba81da1e should parse now 2016-02-07 17:00:24 -08:00
Ty Overby 13d9e30813 no run on tests 2016-02-07 16:56:51 -08:00
Ty Overby 05850df34a Merge branch 'master' of github.com:TyOverby/bincode 2016-02-07 16:46:33 -08:00
Ty Overby 25cfb15823 add more docs 2016-02-07 16:46:23 -08:00
Ty Overby 7662a57727 add more useful syntax error messages 2016-01-19 08:46:33 -08:00
Ty Overby a63e80d75d add docs for the new modules 2015-08-07 23:16:35 -07:00
Ty Overby 0cfb64511c moved the two designs into modules 2015-08-07 17:35:27 -07:00
Ty Overby 9c6bf1aa41 remove unused code 2015-08-07 16:39:15 -07:00
Ty Overby 3de218537f Fix test fallout during merge 2015-08-07 16:16:42 -07:00
Erick Tryzelaar b59af483ef Updated to serde 0.5.0 2015-08-07 12:10:02 -07:00
Erick Tryzelaar f04635c1ba Add newtype handlers to speed up parsing newtype structs and variants 2015-07-30 20:45:36 -07:00
Erick Tryzelaar 8ec54e562a Update to serde 0.5.0 2015-07-29 13:15:14 -07:00
Erick Tryzelaar 0d6b8a48b6 Get serde working 2015-07-29 13:15:04 -07:00
Erick Tryzelaar b206032ff1 Initial support for serde serialization 2015-07-01 15:21:26 -07:00
Erick Tryzelaar f11ba0c41f Move tests into the tests/ directory 2015-06-30 07:52:18 -07:00
Ty Overby fd52ae0d64 Revert "Merge pull request #42 from jmesmon/fix-oom"
This reverts commit 1c3f457cf9, reversing
changes made to 84b5c416ca.
2015-05-29 13:50:16 -07:00
Ty Overby e8d783fdfc Revert "fail with size limit on large maps too"
This reverts commit ce286b2519.
2015-05-29 13:39:17 -07:00
Ty Overby ce286b2519 fail with size limit on large maps too 2015-05-28 16:12:46 -07:00
Ty Overby 1c3f457cf9 Merge pull request #42 from jmesmon/fix-oom
check the size of seqs before trying to decode them
2015-05-28 16:09:20 -07:00
Cody P Schafer ee0dccbd02 check the size of seqs before trying to decode them
Fixes #41
2015-05-28 16:03:02 -04:00
Cody P Schafer 9ab3320db7 SliceBox: allow Deref into &[T]
Allows more convenient use of SliceBox where one doesn't care whether
it represents a Vec<T> or &[T] and can handle using a &[T].
2015-05-28 12:05:30 -04:00