Skip to content

Commit 50f987d

Browse files
Upgrade bincode from 1.x to 2.0.0-rc.3 (#3899)
- Updated bincode dependency to 2.0.0-rc.3 in yew and yew-agent packages - Migrated from bincode::serialize/deserialize to bincode::serde::encode_to_vec/decode_from_slice - Updated test expectations for changed base64 encoding format - Used 2.0.0-rc.3 to maintain MSRV compatibility with Rust 1.78.0
1 parent 0102d62 commit 50f987d

File tree

9 files changed

+57
-18
lines changed

9 files changed

+57
-18
lines changed

Cargo.lock

Lines changed: 28 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/yew-agent/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ wasm-bindgen = "0.2"
1717
js-sys = "0.3"
1818
pinned = "0.1.0"
1919
thiserror = "1.0.37"
20-
bincode = { version = "1.3.3" }
20+
bincode = { version = "2.0.0-rc.3", features = ["serde"] }
2121
wasm-bindgen-futures = "0.4"
2222
serde = { version = "1", features = ["derive"] }
2323
futures = "0.3"

packages/yew-agent/src/codec.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ impl Codec for Bincode {
2626
where
2727
I: Serialize,
2828
{
29-
let buf = bincode::serialize(&input).expect("can't serialize an worker message");
29+
let buf = bincode::serde::encode_to_vec(&input, bincode::config::standard())
30+
.expect("can't serialize an worker message");
3031
Uint8Array::from(buf.as_slice()).into()
3132
}
3233

@@ -35,6 +36,8 @@ impl Codec for Bincode {
3536
O: for<'de> Deserialize<'de>,
3637
{
3738
let data = Uint8Array::from(input).to_vec();
38-
bincode::deserialize(&data).expect("can't deserialize an worker message")
39+
let (result, _) = bincode::serde::decode_from_slice(&data, bincode::config::standard())
40+
.expect("can't deserialize an worker message");
41+
result
3942
}
4043
}

packages/yew/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ futures = { version = "0.3", default-features = false, features = ["std"] }
2929
html-escape = { version = "0.2.13", optional = true }
3030
implicit-clone = { version = "0.5", features = ["map"] }
3131
base64ct = { version = "1.6.0", features = ["std"], optional = true }
32-
bincode = { version = "1.3.3", optional = true }
32+
bincode = { version = "2.0.0-rc.3", optional = true, features = ["serde"] }
3333
serde = { version = "1", features = ["derive"] }
3434
tracing = "0.1.40"
3535
tokise = "0.2.0"

packages/yew/src/functional/hooks/use_prepared_state/feat_hydration.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,15 @@ where
9090
.await
9191
.expect("failed to deserialize state");
9292

93-
let (state, deps) =
94-
bincode::deserialize::<(Option<T>, Option<D>)>(&buf)
95-
.map(|(state, deps)| (state.map(Rc::new), deps.map(Rc::new)))
96-
.expect("failed to deserialize state");
93+
let ((state, deps), _) =
94+
bincode::serde::decode_from_slice::<(Option<T>, Option<D>), _>(
95+
&buf,
96+
bincode::config::standard(),
97+
)
98+
.map(|((state, deps), consumed)| {
99+
((state.map(Rc::new), deps.map(Rc::new)), consumed)
100+
})
101+
.expect("failed to deserialize state");
97102

98103
data.set((Ok((state, deps)), None));
99104
});

packages/yew/src/functional/hooks/use_prepared_state/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,11 @@ mod feat_any_hydration_ssr {
129129
fn prepare(&self) -> String {
130130
use base64ct::{Base64, Encoding};
131131

132-
let state = bincode::serialize(&(self.state.as_deref(), self.deps.as_deref()))
133-
.expect("failed to prepare state");
132+
let state = bincode::serde::encode_to_vec(
133+
(self.state.as_deref(), self.deps.as_deref()),
134+
bincode::config::standard(),
135+
)
136+
.expect("failed to prepare state");
134137

135138
Base64::encode_string(&state)
136139
}

packages/yew/src/functional/hooks/use_transitive_state/feat_ssr.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@ where
3030
let f = self.state_fn.borrow_mut().take().unwrap();
3131
let state = f(self.deps.clone());
3232

33-
let state = bincode::serialize(&(Some(&state), Some(&*self.deps)))
34-
.expect("failed to prepare state");
33+
let state = bincode::serde::encode_to_vec(
34+
(Some(&state), Some(&*self.deps)),
35+
bincode::config::standard(),
36+
)
37+
.expect("failed to prepare state");
3538

3639
Base64::encode_string(&state)
3740
}

packages/yew/tests/use_prepared_state.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ async fn use_prepared_state_works() {
4242

4343
assert_eq!(
4444
s,
45-
r#"<!--<[use_prepared_state::use_prepared_state_works::{{closure}}::App]>--><!--<[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--<[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--<?>--><div><!--<[use_prepared_state::use_prepared_state_works::{{closure}}::Comp]>--><div>12345</div><script type="application/x-yew-comp-state">ATkwAAAB</script><!--</[use_prepared_state::use_prepared_state_works::{{closure}}::Comp]>--></div><!--</?>--><!--</[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--</[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--</[use_prepared_state::use_prepared_state_works::{{closure}}::App]>-->"#
45+
r#"<!--<[use_prepared_state::use_prepared_state_works::{{closure}}::App]>--><!--<[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--<[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--<?>--><div><!--<[use_prepared_state::use_prepared_state_works::{{closure}}::Comp]>--><div>12345</div><script type="application/x-yew-comp-state">Afs5MAE=</script><!--</[use_prepared_state::use_prepared_state_works::{{closure}}::Comp]>--></div><!--</?>--><!--</[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--</[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--</[use_prepared_state::use_prepared_state_works::{{closure}}::App]>-->"#
4646
);
4747

4848
gloo::utils::document()
@@ -92,7 +92,7 @@ async fn use_prepared_state_with_suspension_works() {
9292

9393
assert_eq!(
9494
s,
95-
r#"<!--<[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::App]>--><!--<[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--<[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--<?>--><div><!--<[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::Comp]>--><div>12345</div><script type="application/x-yew-comp-state">ATkwAAAB</script><!--</[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::Comp]>--></div><!--</?>--><!--</[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--</[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--</[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::App]>-->"#
95+
r#"<!--<[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::App]>--><!--<[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--<[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--<?>--><div><!--<[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::Comp]>--><div>12345</div><script type="application/x-yew-comp-state">Afs5MAE=</script><!--</[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::Comp]>--></div><!--</?>--><!--</[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--</[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--</[use_prepared_state::use_prepared_state_with_suspension_works::{{closure}}::App]>-->"#
9696
);
9797

9898
gloo::utils::document()

packages/yew/tests/use_transitive_state.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ async fn use_transitive_state_works() {
4242
assert_eq!(
4343
s,
4444
// div text content should be 0 but state should be 12345.
45-
r#"<!--<[use_transitive_state::use_transitive_state_works::{{closure}}::App]>--><!--<[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--<[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--<?>--><div><!--<[use_transitive_state::use_transitive_state_works::{{closure}}::Comp]>--><div>0</div><script type="application/x-yew-comp-state">ATkwAAAB</script><!--</[use_transitive_state::use_transitive_state_works::{{closure}}::Comp]>--></div><!--</?>--><!--</[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--</[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--</[use_transitive_state::use_transitive_state_works::{{closure}}::App]>-->"#
45+
r#"<!--<[use_transitive_state::use_transitive_state_works::{{closure}}::App]>--><!--<[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--<[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--<?>--><div><!--<[use_transitive_state::use_transitive_state_works::{{closure}}::Comp]>--><div>0</div><script type="application/x-yew-comp-state">Afs5MAE=</script><!--</[use_transitive_state::use_transitive_state_works::{{closure}}::Comp]>--></div><!--</?>--><!--</[yew::suspense::component::feat_csr_ssr::BaseSuspense]>--><!--</[yew::suspense::component::feat_csr_ssr::Suspense]>--><!--</[use_transitive_state::use_transitive_state_works::{{closure}}::App]>-->"#
4646
);
4747

4848
gloo::utils::document()

0 commit comments

Comments
 (0)