Skip to content
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

2.0.0 stable #742

Merged
merged 3 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
]
}
},
Expand Down Expand Up @@ -81,7 +81,7 @@
],
"rust": [
"stable",
# "1.55.0" TODO: Pick latest stable version when we release 2.0
"1.85.0"
],
"features": [
"",
Expand Down
5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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"

Expand Down
3 changes: 2 additions & 1 deletion derive/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rust 1.85 brings support for Edition2024, maybe that could be updated as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We currently don't see the point of upgrading to 2024, as the rust compiler will still be able to run 2021 code. We do have the option to bump to 2024 later if we want to start adding new 2024 features

rust-version = "1.85.0"

repository = "https://github.com/bincode-org/bincode"
documentation = "https://docs.rs/bincode_derive"
Expand Down
22 changes: 11 additions & 11 deletions docs/migration_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down Expand Up @@ -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)
Expand All @@ -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.
Expand All @@ -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).

Expand All @@ -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.
14 changes: 7 additions & 7 deletions docs/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -92,15 +92,15 @@ 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

- Fixed size integers are encoded directly
- 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

Expand Down Expand Up @@ -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
Expand Down
19 changes: 13 additions & 6 deletions fuzz/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)]`?

Expand Down
16 changes: 8 additions & 8 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
//!
Expand Down Expand Up @@ -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"]

Expand Down
4 changes: 2 additions & 2 deletions tests/std.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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},
Expand Down Expand Up @@ -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();
Expand Down
Loading