Skip to content

Commit 92d0375

Browse files
committed
Speed up compilation by 22% by compiling serde_derive earlier
Enabling the "derive" feature of `serde` means `serde_derive` must compile before `serde`. But `serde` does not depend on `serde_derive`. Instead depend on `serde_derive` directly so 'serde' and 'serde_derive' can compile in parallel. That speeds up compilation by 22%: Before: $ hyperfine --prepare 'cargo clean' 'cargo build --all-features' Benchmark 1: cargo build --all-features Time (mean ± σ): 4.940 s ± 0.101 s [User: 15.523 s, System: 3.558 s] Range (min … max): 4.773 s … 5.098 s 10 runs After: $ hyperfine --prepare 'cargo clean' 'cargo build --all-features' Benchmark 1: cargo build --all-features Time (mean ± σ): 3.831 s ± 0.138 s [User: 16.185 s, System: 3.602 s] Range (min … max): 3.606 s … 4.040 s 10 runs
1 parent 65e9b05 commit 92d0375

3 files changed

Lines changed: 5 additions & 3 deletions

File tree

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@ rustdoc-args = ["--cfg=doc_cfg"]
2727

2828
[dependencies]
2929
proptest = { version = "1.0.0", optional = true }
30-
serde = { version = "1", features = ["derive"], optional = true }
30+
serde = { version = "1", optional = true }
31+
serde_derive = { version = "1", optional = true }
3132

3233
[dev-dependencies]
3334
bincode = "1"
3435
serde_bytes = "0.11.8"
3536

3637
[features]
37-
serde1 = ["serde"]
38+
serde1 = ["serde", "serde_derive"]
3839
proptest1 = ["proptest"]

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ mod tests;
108108
/// Which method works best depends on what kind of situation you're in.
109109
// NB: Internal PathBuf must only contain utf8 data
110110
#[derive(Clone, Default)]
111-
#[cfg_attr(feature = "serde1", derive(serde::Serialize, serde::Deserialize))]
111+
#[cfg_attr(feature = "serde1", derive(serde_derive::Serialize, serde_derive::Deserialize))]
112112
#[cfg_attr(feature = "serde1", serde(transparent))]
113113
#[repr(transparent)]
114114
pub struct Utf8PathBuf(PathBuf);

src/serde_impls.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ mod tests {
7373
use super::*;
7474
use crate::Utf8PathBuf;
7575
use serde_bytes::ByteBuf;
76+
use serde_derive::{Deserialize, Serialize};
7677

7778
#[test]
7879
fn valid_utf8() {

0 commit comments

Comments
 (0)