Skip to content

Commit 946bde4

Browse files
authored
fix: remove dependency on derivative (#294)
* add derive-where * gen Default for non unit enum * remove derive_where and derivative * use absolute path of std::default::Default
1 parent 47c136c commit 946bde4

39 files changed

+961
-520
lines changed

Cargo.lock

-14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ faststr = "0.2"
5050
[dev-dependencies]
5151

5252
tokio = { version = "1", features = ["io-util"] }
53-
derivative = "2"
5453
tempfile = "3"
5554
diffy = "0.4"
5655
criterion = { version = "0.5", features = ["html_reports"] }

pilota-build/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ faststr = "0.2"
5050
[dev-dependencies]
5151
pilota = { path = "../pilota" }
5252
tokio = { version = "1", features = ["io-util"] }
53-
derivative = "2"
5453
tempfile = "3"
5554
diffy = "0.4"
5655
criterion = { version = "0.5", features = ["html_reports"] }

pilota-build/src/plugin/mod.rs

+36-12
Original file line numberDiff line numberDiff line change
@@ -391,18 +391,42 @@ impl Plugin for ImplDefaultPlugin {
391391
cx.with_adjust_mut(def_id, |adj| adj.add_attrs(&["#[derive(Default)]".into()]))
392392
}
393393
Item::Enum(e) => {
394-
if !e.variants.is_empty() {
395-
cx.with_adjust_mut(def_id, |adj| {
396-
adj.add_attrs(&[
397-
"#[derive(::pilota::derivative::Derivative)]".into(),
398-
"#[derivative(Default)]".into(),
399-
]);
400-
});
401-
402-
if let Some(v) = e.variants.first() {
403-
cx.with_adjust_mut(v.did, |adj| {
404-
adj.add_attrs(&["#[derivative(Default)]".into()]);
405-
})
394+
if let Some(first_variant) = e.variants.first() {
395+
let is_unit_variant = first_variant.fields.is_empty();
396+
if is_unit_variant {
397+
cx.with_adjust_mut(def_id, |adj| {
398+
adj.add_attrs(&["#[derive(Default)]".into()]);
399+
});
400+
401+
if let Some(v) = e.variants.first() {
402+
cx.with_adjust_mut(v.did, |adj| {
403+
adj.add_attrs(&["#[default]".into()]);
404+
})
405+
}
406+
} else {
407+
// for non unit variant, we need to impl Default for the enum
408+
let enum_name = cx.rust_name(def_id);
409+
let variant_name = cx.rust_name(first_variant.did);
410+
let fields = first_variant
411+
.fields
412+
.iter()
413+
.map(|_| "::std::default::Default::default()".to_string())
414+
.join(",\n");
415+
416+
cx.with_adjust_mut(def_id, |adj| {
417+
adj.add_nested_item(
418+
format!(
419+
r#"
420+
impl ::std::default::Default for {enum_name} {{
421+
fn default() -> Self {{
422+
{enum_name}::{variant_name} ({fields})
423+
}}
424+
}}
425+
"#
426+
)
427+
.into(),
428+
)
429+
});
406430
}
407431
}
408432
}

pilota-build/test_data/plugin/serde.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,16 @@ pub mod serde {
195195
+ __protocol.struct_end_len()
196196
}
197197
}
198-
#[derive(PartialOrd, Hash, Eq, Ord, Debug, ::pilota::derivative::Derivative)]
199-
#[derivative(Default)]
200-
#[derive(::pilota::serde::Serialize, ::pilota::serde::Deserialize)]
198+
#[derive(
199+
PartialOrd,
200+
Hash,
201+
Eq,
202+
Ord,
203+
Debug,
204+
Default,
205+
::pilota::serde::Serialize,
206+
::pilota::serde::Deserialize,
207+
)]
201208
#[serde(untagged)]
202209
#[serde(transparent)]
203210
#[derive(Clone, PartialEq, Copy)]

pilota-build/test_data/protobuf/nested_message.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ pub mod nested_message {
8484
}
8585

8686
pub mod tt1 {
87-
#[derive(PartialOrd, Hash, Eq, Ord, Debug, ::pilota::derivative::Derivative)]
88-
#[derivative(Default)]
89-
#[derive(Clone, PartialEq, Copy)]
87+
#[derive(PartialOrd, Hash, Eq, Ord, Debug, Default, Clone, PartialEq, Copy)]
9088
#[repr(transparent)]
9189
pub struct Label(i32);
9290

pilota-build/test_data/protobuf/oneof.rs

+13-8
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,14 @@ pub mod oneof {
9797
}
9898

9999
pub mod test {
100-
#[derive(PartialOrd, Hash, Eq, Ord, Debug, ::pilota::derivative::Derivative)]
101-
#[derivative(Default)]
102-
#[derive(Clone, PartialEq)]
100+
101+
impl ::std::default::Default for Test {
102+
fn default() -> Self {
103+
Test::A(::std::default::Default::default())
104+
}
105+
}
106+
#[derive(PartialOrd, Hash, Eq, Ord, Debug, Clone, PartialEq)]
103107
pub enum Test {
104-
#[derivative(Default)]
105108
A(::pilota::FastStr),
106109

107110
B(i32),
@@ -168,11 +171,13 @@ pub mod oneof {
168171
::core::result::Result::Ok(())
169172
}
170173
}
171-
#[derive(PartialOrd, Hash, Eq, Ord, Debug, ::pilota::derivative::Derivative)]
172-
#[derivative(Default)]
173-
#[derive(Clone, PartialEq)]
174+
impl ::std::default::Default for Type {
175+
fn default() -> Self {
176+
Type::S(::std::default::Default::default())
177+
}
178+
}
179+
#[derive(PartialOrd, Hash, Eq, Ord, Debug, Clone, PartialEq)]
174180
pub enum Type {
175-
#[derivative(Default)]
176181
S(::pilota::FastStr),
177182

178183
I(i32),

0 commit comments

Comments
 (0)