2.0.0 stable (#742)

Prepare for 2.0.0 stable release

---------

Co-authored-by: Zoey Riordan <zoey@dos.cafe>
This commit is contained in:
Trangar 2025-03-06 17:58:40 +01:00 committed by GitHub
parent 2c87442fe6
commit bd694430e4
9 changed files with 51 additions and 42 deletions

View File

@ -25,8 +25,8 @@
"rust": [
"stable",
"beta",
"nightly"
# "1.55.0" TODO: Pick latest stable version when we release 2.0
"nightly",
"1.85.0"
]
}
},
@ -81,7 +81,7 @@
],
"rust": [
"stable",
# "1.55.0" TODO: Pick latest stable version when we release 2.0
"1.85.0"
],
"features": [
"",

View File

@ -3,13 +3,14 @@ members = ["derive", "compatibility"]
[package]
name = "bincode"
version = "2.0.0-rc.3" # remember to update html_root_url and bincode_derive
version = "2.0.0" # remember to update html_root_url and bincode_derive
authors = [
"Ty Overby <ty@pre-alpha.com>",
"Zoey Riordan <zoey@dos.cafe>",
"Victor Koenders <bincode@trangar.com>",
]
exclude = ["logo.svg", "examples/*", ".gitignore", ".github/"]
rust-version = "1.85.0"
publish = true
@ -31,7 +32,7 @@ alloc = ["serde?/alloc"]
derive = ["bincode_derive"]
[dependencies]
bincode_derive = { path = "derive", version = "2.0.0-rc.3", optional = true }
bincode_derive = { path = "derive", version = "2.0.0", optional = true }
serde = { version = "1.0", default-features = false, optional = true }
unty = "0.0.3"

View File

@ -100,7 +100,7 @@ maximum size limit. Malicious inputs will fail upon deserialization.
### What is Bincode's MSRV (minimum supported Rust version)?
Bincode 2.0 is still in development and does not yet have a targeted MSRV. Once 2.0 is fully released the MSRV will be locked. After this point any changes to the MSRV are considered a breaking change for semver purposes.
Bincode 2.0 has an MSRV of 1.85.0. Any changes to the MSRV are considered a breaking change for semver purposes, except when certain features are enabled. Features affecting MSRV are documented in the crate root.
### Why does bincode not respect `#[repr(u8)]`?

View File

@ -1,11 +1,12 @@
[package]
name = "bincode_derive"
version = "2.0.0-rc.3" # remember to update bincode
version = "2.0.0" # remember to update bincode
authors = [
"Zoey Riordan <zoey@dos.cafe>",
"Victor Koenders <bincode@trangar.com>",
]
edition = "2021"
rust-version = "1.85.0"
repository = "https://github.com/bincode-org/bincode"
documentation = "https://docs.rs/bincode_derive"

View File

@ -4,7 +4,7 @@ Bincode 2 now has an optional dependency on `serde`. You can either use `serde`,
## From `Options` to `Configuration`
Bincode 1 had the [Options](https://docs.rs/bincode/1/bincode/config/trait.Options.html) trait. This has been replaced with the [Configuration](https://docs.rs/bincode/2.0.0-rc/bincode/config/struct.Configuration.html) struct.
Bincode 1 had the [Options](https://docs.rs/bincode/1/bincode/config/trait.Options.html) trait. This has been replaced with the [Configuration](https://docs.rs/bincode/2.0.0/bincode/config/struct.Configuration.html) struct.
If you're using `Options`, you can change it like this:
@ -46,10 +46,10 @@ If so, make sure to include bincode 2 with the `serde` feature enabled, and use
```toml
[dependencies]
bincode = { version = "2.0.0-rc", features = ["serde"] }
bincode = { version = "2.0.0", features = ["serde"] }
# Optionally you can disable the `derive` feature:
# bincode = { version = "2.0.0-rc", default-features = false, features = ["std", "serde"] }
# bincode = { version = "2.0.0", default-features = false, features = ["std", "serde"] }
```
Then replace the following functions: (`Configuration` is `bincode::config::legacy()` by default)
@ -70,13 +70,13 @@ Then replace the following functions: (`Configuration` is `bincode::config::lega
```toml,ignore
[dependencies]
bincode = "2.0.0-rc"
bincode = "2.0.0"
# If you need `no_std` with `alloc`:
# bincode = { version = "2.0.0-rc", default-features = false, features = ["derive", "alloc"] }
# bincode = { version = "2.0.0", default-features = false, features = ["derive", "alloc"] }
# If you need `no_std` and no `alloc`:
# bincode = { version = "2.0.0-rc", default-features = false, features = ["derive"] }
# bincode = { version = "2.0.0", default-features = false, features = ["derive"] }
```
Replace or add the following attributes. You are able to use both `serde-derive` and `bincode-derive` side-by-side.
@ -86,7 +86,7 @@ Replace or add the following attributes. You are able to use both `serde-derive`
| `#[derive(serde::Serialize)]` | `#[derive(bincode::Encode)]` |
| `#[derive(serde::Deserialize)]` | `#[derive(bincode::Decode)]` |
**note:** To implement these traits manually, see the documentation of [Encode](https://docs.rs/bincode/2.0.0-rc/bincode/enc/trait.Encode.html) and [Decode](https://docs.rs/bincode/2.0.0-rc/bincode/de/trait.Decode.html).
**note:** To implement these traits manually, see the documentation of [Encode](https://docs.rs/bincode/2.0.0/bincode/enc/trait.Encode.html) and [Decode](https://docs.rs/bincode/2.0.0/bincode/de/trait.Decode.html).
**note:** For more information on using `bincode-derive` with external libraries, see [below](#bincode-derive-and-libraries).
@ -107,10 +107,10 @@ Then replace the following functions: (`Configuration` is `bincode::config::lega
Currently not many libraries support the traits `Encode` and `Decode`. There are a couple of options if you want to use `#[derive(bincode::Encode, bincode::Decode)]`:
- Enable the `serde` feature and add a `#[bincode(with_serde)]` above each field that implements `serde::Serialize/Deserialize` but not `Encode/Decode`
- Enable the `serde` feature and wrap your field in [bincode::serde::Compat](https://docs.rs/bincode/2.0.0-rc/bincode/serde/struct.Compat.html) or [bincode::serde::BorrowCompat](https://docs.rs/bincode/2.0.0-rc/bincode/serde/struct.BorrowCompat.html)
- Enable the `serde` feature and wrap your field in [bincode::serde::Compat](https://docs.rs/bincode/2.0.0/bincode/serde/struct.Compat.html) or [bincode::serde::BorrowCompat](https://docs.rs/bincode/2.0.0/bincode/serde/struct.BorrowCompat.html)
- Make a pull request to the library:
- Make sure to be respectful, most of the developers are doing this in their free time.
- Add a dependency `bincode = { version = "2.0.0-rc", default-features = false, optional = true }` to the `Cargo.toml`
- Implement [Encode](https://docs.rs/bincode/2.0.0-rc/bincode/enc/trait.Encode.html)
- Implement [Decode](https://docs.rs/bincode/2.0.0-rc/bincode/de/trait.Decode.html)
- Add a dependency `bincode = { version = "2.0.0", default-features = false, optional = true }` to the `Cargo.toml`
- Implement [Encode](https://docs.rs/bincode/2.0.0/bincode/enc/trait.Encode.html)
- Implement [Decode](https://docs.rs/bincode/2.0.0/bincode/de/trait.Decode.html)
- Make sure both of these implementations have a `#[cfg(feature = "bincode")]` attribute.

View File

@ -15,8 +15,8 @@ By default, this serialization format uses little-endian byte order for basic nu
Endianness can be configured with the following methods, allowing for big-endian serialization when required:
- [`with_big_endian`](https://docs.rs/bincode/2.0.0-rc/bincode/config/struct.Configuration.html#method.with_big_endian)
- [`with_little_endian`](https://docs.rs/bincode/2.0.0-rc/bincode/config/struct.Configuration.html#method.with_little_endian)
- [`with_big_endian`](https://docs.rs/bincode/2.0.0/bincode/config/struct.Configuration.html#method.with_big_endian)
- [`with_little_endian`](https://docs.rs/bincode/2.0.0/bincode/config/struct.Configuration.html#method.with_little_endian)
### Byte Order Considerations
@ -31,7 +31,7 @@ Endianness can be configured with the following methods, allowing for big-endian
- Encoded as a single byte
- `false` is represented by `0`
- `true` is represented by `1`
- During deserialization, values other than 0 and 1 will result in an error [`DecodeError::InvalidBooleanValue`](https://docs.rs/bincode/2.0.0-rc/bincode/error/enum.DecodeError.html#variant.InvalidBooleanValue)
- During deserialization, values other than 0 and 1 will result in an error [`DecodeError::InvalidBooleanValue`](https://docs.rs/bincode/2.0.0/bincode/error/enum.DecodeError.html#variant.InvalidBooleanValue)
### Numeric Types
@ -62,7 +62,7 @@ Endianness can be configured with the following methods, allowing for big-endian
- Surrogate code points (0xD800 to 0xDFFF) are not valid
- Invalid Unicode characters can be acquired via unsafe code, this is handled as:
- during serialization: data is written as-is
- during deserialization: an error is raised [`DecodeError::InvalidCharEncoding`](https://docs.rs/bincode/2.0.0-rc/bincode/error/enum.DecodeError.html#variant.InvalidCharEncoding)
- during deserialization: an error is raised [`DecodeError::InvalidCharEncoding`](https://docs.rs/bincode/2.0.0/bincode/error/enum.DecodeError.html#variant.InvalidCharEncoding)
- No additional metadata or encoding scheme beyond the raw code point value
All tuples have no additional bytes, and are encoded in their specified order, e.g.
@ -92,7 +92,7 @@ Encoding an unsigned integer v (of any type excepting u8/i8) works as follows:
`usize` is being encoded/decoded as a `u64` and `isize` is being encoded/decoded as a `i64`.
See the documentation of [VarintEncoding](https://docs.rs/bincode/2.0.0-rc/bincode/config/struct.Configuration.html#method.with_variable_int_encoding) for more information.
See the documentation of [VarintEncoding](https://docs.rs/bincode/2.0.0/bincode/config/struct.Configuration.html#method.with_variable_int_encoding) for more information.
### FixintEncoding
@ -100,7 +100,7 @@ See the documentation of [VarintEncoding](https://docs.rs/bincode/2.0.0-rc/binco
- Enum discriminants are encoded as u32
- Lengths and usize are encoded as u64
See the documentation of [FixintEncoding](https://docs.rs/bincode/2.0.0-rc/bincode/config/struct.Configuration.html#method.with_fixed_int_encoding) for more information.
See the documentation of [FixintEncoding](https://docs.rs/bincode/2.0.0/bincode/config/struct.Configuration.html#method.with_fixed_int_encoding) for more information.
## Enums
@ -224,7 +224,7 @@ assert_eq!(encoded.as_slice(), &[
- During serialization, the string is encoded as a sequence of the given bytes.
- Rust strings are UTF-8 encoded by default, but this is not enforced by bincode
- No normalization or transformation of text
- If an invalid UTF-8 sequence is encountered during decoding, an [`DecodeError::Utf8`](https://docs.rs/bincode/2.0.0-rc/bincode/error/enum.DecodeError.html#variant.Utf8) error is raised
- If an invalid UTF-8 sequence is encountered during decoding, an [`DecodeError::Utf8`](https://docs.rs/bincode/2.0.0/bincode/error/enum.DecodeError.html#variant.Utf8) error is raised
```rust
let str = "Hello 🌍"; // Mixed ASCII and Unicode

21
fuzz/Cargo.lock generated
View File

@ -1,6 +1,6 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
version = 4
[[package]]
name = "arbitrary"
@ -19,10 +19,11 @@ dependencies = [
[[package]]
name = "bincode"
version = "2.0.0-rc.3"
version = "2.0.0"
dependencies = [
"bincode_derive",
"serde",
"unty",
]
[[package]]
@ -30,14 +31,14 @@ name = "bincode-fuzz"
version = "0.0.0"
dependencies = [
"bincode 1.3.3",
"bincode 2.0.0-rc.3",
"bincode 2.0.0",
"libfuzzer-sys",
"serde",
]
[[package]]
name = "bincode_derive"
version = "2.0.0-rc.3"
version = "2.0.0"
dependencies = [
"virtue",
]
@ -121,7 +122,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "virtue"
version = "0.0.13"
name = "unty"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9dcc60c0624df774c82a0ef104151231d37da4962957d691c011c852b2473314"
checksum = "a1a88342087869553c259588a3ec9ca73ce9b2d538b7051ba5789ff236b6c129"
[[package]]
name = "virtue"
version = "0.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1"

View File

@ -15,13 +15,13 @@
//!
//! # Features
//!
//! |Name |Default?|Supported types for Encode/Decode|Enabled methods |Other|
//! |------|--------|-----------------------------------------|-----------------------------------------------------------------|-----|
//! |std | Yes |`HashMap` and `HashSet`|`decode_from_std_read` and `encode_into_std_write`|
//! |alloc | Yes |All common containers in alloc, like `Vec`, `String`, `Box`|`encode_to_vec`|
//! |atomic| Yes |All `Atomic*` integer types, e.g. `AtomicUsize`, and `AtomicBool`||
//! |derive| Yes |||Enables the `BorrowDecode`, `Decode` and `Encode` derive macros|
//! |serde | No |`Compat` and `BorrowCompat`, which will work for all types that implement serde's traits|serde-specific encode/decode functions in the [serde] module|Note: There are several [known issues](serde/index.html#known-issues) when using serde and bincode|
//! |Name |Default?|Affects MSRV?|Supported types for Encode/Decode|Enabled methods |Other|
//! |------|--------|-------------|-----------------------------------------|-----------------------------------------------------------------|-----|
//! |std | Yes | No |`HashMap` and `HashSet`|`decode_from_std_read` and `encode_into_std_write`|
//! |alloc | Yes | No |All common containers in alloc, like `Vec`, `String`, `Box`|`encode_to_vec`|
//! |atomic| Yes | No |All `Atomic*` integer types, e.g. `AtomicUsize`, and `AtomicBool`||
//! |derive| Yes | No |||Enables the `BorrowDecode`, `Decode` and `Encode` derive macros|
//! |serde | No | Yes (MSRV reliant on serde)|`Compat` and `BorrowCompat`, which will work for all types that implement serde's traits|serde-specific encode/decode functions in the [serde] module|Note: There are several [known issues](serde/index.html#known-issues) when using serde and bincode|
//!
//! # Which functions to use
//!
@ -71,7 +71,7 @@
//! [`net::TcpStream`]: std::net::TcpStream
//!
#![doc(html_root_url = "https://docs.rs/bincode/2.0.0-rc.3")]
#![doc(html_root_url = "https://docs.rs/bincode/2.0.0")]
#![crate_name = "bincode"]
#![crate_type = "rlib"]

View File

@ -5,7 +5,7 @@ mod utils;
use bincode::error::DecodeError;
use std::{
ffi::{CStr, CString},
ffi::CString,
io::{Cursor, Seek, SeekFrom},
net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6},
path::{Path, PathBuf},
@ -128,7 +128,7 @@ fn test_std_commons() {
let mut buffer = [0u8; 1024];
// &CStr
let cstr = CStr::from_bytes_with_nul(b"Hello world\0").unwrap();
let cstr = c"Hello world";
let len = bincode::encode_into_slice(cstr, &mut buffer, config).unwrap();
let (decoded, len): (CString, usize) =
bincode::decode_from_slice(&buffer[..len], config).unwrap();