serde-rs / serde

Serialization framework for Rust
https://serde.rs/
Apache License 2.0
8.81k stars 747 forks source link

Improve error message for using tag with alloc disabled #2742

Closed dtolnay closed 1 month ago

dtolnay commented 1 month ago

Closes #2668.

// [dependencies]
// serde = { version = "1", default-features = false }
// serde_derive = "1"

#[derive(serde_derive::Deserialize)]
#[serde(tag = "type")]
pub enum MyEnum {
    MyVariant
}

Error message before:

error[E0433]: failed to resolve: could not find `TaggedContentVisitor` in `de`
  --> src/main.rs:5:10
   |
5  | #[derive(serde_derive::Deserialize)]
   |          ^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `TaggedContentVisitor` in `de`
   |
note: found an item that was configured out
  --> serde/src/private/de.rs:16:50
   |
16 |     TagOrContentField, TagOrContentFieldVisitor, TaggedContentVisitor, UntaggedUnitVisitor,
   |                                                  ^^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the derive macro `serde_derive::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0433]: failed to resolve: could not find `ContentDeserializer` in `de`
  --> src/main.rs:5:10
   |
5  | #[derive(serde_derive::Deserialize)]
   |          ^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `ContentDeserializer` in `de`
   |
note: found an item that was configured out
  --> serde/src/private/de.rs:14:14
   |
14 |     Content, ContentDeserializer, ContentRefDeserializer, EnumDeserializer,
   |              ^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the derive macro `serde_derive::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0433]: failed to resolve: could not find `InternallyTaggedUnitVisitor` in `de`
  --> src/main.rs:5:10
   |
5  | #[derive(serde_derive::Deserialize)]
   |          ^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `InternallyTaggedUnitVisitor` in `de`
   |
note: found an item that was configured out
  --> serde/src/private/de.rs:15:5
   |
15 |     InternallyTaggedUnitVisitor, TagContentOtherField, TagContentOtherFieldVisitor,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the derive macro `serde_derive::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)

After:

error: Serde's `tag` attribute requires either "alloc" or "std" feature to be enabled on the serde crate
 --> src/main.rs:5:10
  |
5 | #[derive(serde_derive::Deserialize)]
  |          ^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: this error originates in the macro `_serde::__require_alloc_or_std` which comes from the expansion of the derive macro `serde_derive::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0433]: failed to resolve: could not find `TaggedContentVisitor` in `de`
  --> src/main.rs:5:10
   |
5  | #[derive(serde_derive::Deserialize)]
   |          ^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `TaggedContentVisitor` in `de`
   |
note: found an item that was configured out
  --> serde/src/private/de.rs:16:50
   |
16 |     TagOrContentField, TagOrContentFieldVisitor, TaggedContentVisitor, UntaggedUnitVisitor,
   |                                                  ^^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the derive macro `serde_derive::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0433]: failed to resolve: could not find `ContentDeserializer` in `de`
  --> src/main.rs:5:10
   |
5  | #[derive(serde_derive::Deserialize)]
   |          ^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `ContentDeserializer` in `de`
   |
note: found an item that was configured out
  --> serde/src/private/de.rs:14:14
   |
14 |     Content, ContentDeserializer, ContentRefDeserializer, EnumDeserializer,
   |              ^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the derive macro `serde_derive::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0433]: failed to resolve: could not find `InternallyTaggedUnitVisitor` in `de`
  --> src/main.rs:5:10
   |
5  | #[derive(serde_derive::Deserialize)]
   |          ^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `InternallyTaggedUnitVisitor` in `de`
   |
note: found an item that was configured out
  --> serde/src/private/de.rs:15:5
   |
15 |     InternallyTaggedUnitVisitor, TagContentOtherField, TagContentOtherFieldVisitor,
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the derive macro `serde_derive::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)