From 12c8ee0ce6eaca3a809e83d9df768b67322a7f2a Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Mon, 15 Apr 2024 22:08:33 -0700 Subject: [PATCH] Hide "non-exhaustive patterns" errors when crate fails to compile Fixes #1125. error: expected item, found `"serde_json requires that either `std` (default) or `alloc` feature is enabled"` --> ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde_json-1.0.115/src/features_check/error.rs:1:1 | 1 | "serde_json requires that either `std` (default) or `alloc` feature is enabled" | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected item | = note: for a full list of items that can appear in modules, see error[E0004]: non-exhaustive patterns: `Value::String(_)` not covered --> ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde_json-1.0.115/src/value/de.rs:216:15 | 216 | match self { | ^^^^ pattern `Value::String(_)` not covered | note: `Value` defined here --> ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde_json-1.0.115/src/value/mod.rs:116:10 | 116 | pub enum Value { | ^^^^^ ... 151 | String(String), | ------ not covered = note: the matched value is of type `Value` help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown | 223 ~ Value::Object(v) => visit_object(v, visitor), 224 ~ Value::String(_) => todo!(), | error[E0004]: non-exhaustive patterns: `Cow::Owned(_)` not covered --> ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde_json-1.0.115/src/value/de.rs:1338:15 | 1338 | match self.value { | ^^^^^^^^^^ pattern `Cow::Owned(_)` not covered | note: `Cow<'_, str>` defined here --> /rustc/98aa3624be70462d6a25ed5544333e3df62f4c66/library/alloc/src/borrow.rs:180:1 ::: /rustc/98aa3624be70462d6a25ed5544333e3df62f4c66/library/alloc/src/borrow.rs:190:5 | = note: not covered = note: the matched value is of type `Cow<'_, str>` help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown | 1339 ~ Cow::Borrowed(string) => visitor.visit_borrowed_str(string), 1340 ~ Cow::Owned(_) => todo!(), | error[E0004]: non-exhaustive patterns: `&Value::Object(_)` not covered --> ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde_json-1.0.115/src/value/ser.rs:17:15 | 17 | match self { | ^^^^ pattern `&Value::Object(_)` not covered | note: `Value` defined here --> ~/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde_json-1.0.115/src/value/mod.rs:116:10 | 116 | pub enum Value { | ^^^^^ ... 175 | Object(Map), | ------ not covered = note: the matched value is of type `&Value` help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown | 22 ~ Value::Array(v) => v.serialize(serializer), 23 ~ &Value::Object(_) => todo!(), | --- src/value/de.rs | 4 ++++ src/value/ser.rs | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/value/de.rs b/src/value/de.rs index 1e8b5acbb..936725635 100644 --- a/src/value/de.rs +++ b/src/value/de.rs @@ -219,6 +219,8 @@ impl<'de> serde::Deserializer<'de> for Value { Value::Number(n) => n.deserialize_any(visitor), #[cfg(any(feature = "std", feature = "alloc"))] Value::String(v) => visitor.visit_string(v), + #[cfg(not(any(feature = "std", feature = "alloc")))] + Value::String(_) => unreachable!(), Value::Array(v) => visit_array(v, visitor), Value::Object(v) => visit_object(v, visitor), } @@ -1339,6 +1341,8 @@ impl<'de> de::Deserializer<'de> for BorrowedCowStrDeserializer<'de> { Cow::Borrowed(string) => visitor.visit_borrowed_str(string), #[cfg(any(feature = "std", feature = "alloc"))] Cow::Owned(string) => visitor.visit_string(string), + #[cfg(not(any(feature = "std", feature = "alloc")))] + Cow::Owned(_) => unreachable!(), } } diff --git a/src/value/ser.rs b/src/value/ser.rs index 835fa9080..e869ae160 100644 --- a/src/value/ser.rs +++ b/src/value/ser.rs @@ -29,6 +29,8 @@ impl Serialize for Value { } map.end() } + #[cfg(not(any(feature = "std", feature = "alloc")))] + Value::Object(_) => unreachable!(), } } }