Skip to content

Commit 22b925f

Browse files
authored
Improve Compile Times with serde_derive (#1075)
This massively improves compile times by not forcing `serde` to depend on `serde_derive`. This allows many crates to start compiling much sooner, which ends up resulting in often quite massive compile time wins for real world projects.
1 parent 0afccc9 commit 22b925f

File tree

4 files changed

+14
-10
lines changed

4 files changed

+14
-10
lines changed

url/Cargo.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ edition = "2018"
1717
rust-version = "1.63" # From libc
1818

1919
[dev-dependencies]
20-
serde = { version = "1.0", features = ["derive"] }
20+
serde = "1.0"
21+
serde_derive = "1.0"
2122
serde_json = "1.0"
2223
bencher = "0.1"
2324

@@ -28,7 +29,8 @@ wasm-bindgen-test = "0.3"
2829
form_urlencoded = { version = "1.2.2", path = "../form_urlencoded", default-features = false, features = ["alloc"] }
2930
idna = { version = "1.1.0", path = "../idna", default-features = false, features = ["alloc", "compiled_data"] }
3031
percent-encoding = { version = "2.3.2", path = "../percent_encoding", default-features = false, features = ["alloc"] }
31-
serde = { version = "1.0", optional = true, features = ["derive"], default-features = false }
32+
serde = { version = "1.0", optional = true, default-features = false }
33+
serde_derive = { version = "1.0", optional = true, default-features = false }
3234

3335
[features]
3436
default = ["std"]
@@ -38,6 +40,8 @@ std = ["idna/std", "percent-encoding/std", "form_urlencoded/std", "serde?/std"]
3840
debugger_visualizer = []
3941
# Expose internal offsets of the URL.
4042
expose_internals = []
43+
# Enables serialization and deserialization via serde.
44+
serde = ["dep:serde", "dep:serde_derive"]
4145

4246
[[test]]
4347
name = "url_wpt"

url/src/host.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use core::fmt::{self, Formatter};
1616

1717
use percent_encoding::{percent_decode, utf8_percent_encode, CONTROLS};
1818
#[cfg(feature = "serde")]
19-
use serde::{Deserialize, Serialize};
19+
use serde_derive::{Deserialize, Serialize};
2020

2121
use crate::parser::{ParseError, ParseResult};
2222

url/tests/unit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1370,7 +1370,7 @@ fn issue_974() {
13701370
#[cfg(feature = "serde")]
13711371
#[test]
13721372
fn serde_error_message() {
1373-
use serde::Deserialize;
1373+
use serde_derive::Deserialize;
13741374
#[derive(Debug, Deserialize)]
13751375
#[allow(dead_code)]
13761376
struct TypeWithUrl {

url/tests/wpt.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,23 +64,23 @@ macro_rules! println {
6464
}
6565
}
6666

67-
#[derive(Debug, serde::Deserialize)]
67+
#[derive(Debug, serde_derive::Deserialize)]
6868
struct UrlTest {
6969
input: String,
7070
base: Option<String>,
7171
#[serde(flatten)]
7272
result: UrlTestResult,
7373
}
7474

75-
#[derive(Debug, serde::Deserialize)]
75+
#[derive(Debug, serde_derive::Deserialize)]
7676
#[serde(untagged)]
7777
#[allow(clippy::large_enum_variant)]
7878
enum UrlTestResult {
7979
Ok(UrlTestOk),
8080
Fail(UrlTestFail),
8181
}
8282

83-
#[derive(Debug, serde::Deserialize)]
83+
#[derive(Debug, serde_derive::Deserialize)]
8484
struct UrlTestOk {
8585
href: String,
8686
protocol: String,
@@ -94,19 +94,19 @@ struct UrlTestOk {
9494
hash: String,
9595
}
9696

97-
#[derive(Debug, serde::Deserialize)]
97+
#[derive(Debug, serde_derive::Deserialize)]
9898
struct UrlTestFail {
9999
failure: bool,
100100
}
101101

102-
#[derive(Debug, serde::Deserialize)]
102+
#[derive(Debug, serde_derive::Deserialize)]
103103
struct SetterTest {
104104
href: String,
105105
new_value: String,
106106
expected: SetterTestExpected,
107107
}
108108

109-
#[derive(Debug, serde::Deserialize)]
109+
#[derive(Debug, serde_derive::Deserialize)]
110110
struct SetterTestExpected {
111111
href: Option<String>,
112112
protocol: Option<String>,

0 commit comments

Comments
 (0)