You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If a crate depending on serde wants to have a feature whose name itself is serde, it's necessary to rename the serde crate to avoid a feature/crate name conflict, like so:
Cargo.toml:
[package]
name = "serde-derive-bug"version = "0.1.0"edition = "2018"
[features]
serde = []
[dependencies]
serde-by-some-other-name = { package = "serde", version = "1", features = ["derive"] }
What goes wrong
However, this causes #[derive(Deserialize)] and #[derive(Serialize)] to break. Suppose we try:
src/lib.rs:
use serde_by_some_other_name::{Serialize,Deserialize};#[derive(Serialize)]#[derive(Deserialize)]structSomething;
Although the imports of the derive macros succeed, the macros return the following compile errors:
error[E0463]: can't find crate for `serde`
--> src/lib.rs:4:10
|
4 | #[derive(Deserialize)]
| ^^^^^^^^^^^ can't find crate
|
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0463]: can't find crate for `serde`
--> src/lib.rs:3:10
|
3 | #[derive(Serialize)]
| ^^^^^^^^^ can't find crate
|
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)
The two errors cannot be triggered simultaneously because it appears compilation aborts at the first such error, even if the derive attributes are placed on totally separate structs. Commenting out one line or the other causes the remaining error to present itself.
As far as I can tell, there is no way to rename serde to another name using package = ... while preserving the ability to use #[derive(Deserialize, Serialize)]. Is there a workaround for this limitation?
The text was updated successfully, but these errors were encountered:
Why this might matter
If a crate depending on
serde
wants to have a feature whose name itself isserde
, it's necessary to rename theserde
crate to avoid a feature/crate name conflict, like so:Cargo.toml
:What goes wrong
However, this causes
#[derive(Deserialize)]
and#[derive(Serialize)]
to break. Suppose we try:src/lib.rs
:Although the imports of the derive macros succeed, the macros return the following compile errors:
The two errors cannot be triggered simultaneously because it appears compilation aborts at the first such error, even if the derive attributes are placed on totally separate structs. Commenting out one line or the other causes the remaining error to present itself.
As far as I can tell, there is no way to rename
serde
to another name usingpackage = ...
while preserving the ability to use#[derive(Deserialize, Serialize)]
. Is there a workaround for this limitation?The text was updated successfully, but these errors were encountered: