Skip to content

Commit

Permalink
Hide "non-exhaustive patterns" errors when crate fails to compile
Browse files Browse the repository at this point in the history
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 <https://doc.rust-lang.org/reference/items.html>

    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<String, Value>),
        |     ------ 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!(),
        |
  • Loading branch information
dtolnay committed Apr 16, 2024
1 parent 051ce97 commit 12c8ee0
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/value/de.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
}
Expand Down Expand Up @@ -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!(),
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/value/ser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ impl Serialize for Value {
}
map.end()
}
#[cfg(not(any(feature = "std", feature = "alloc")))]
Value::Object(_) => unreachable!(),
}
}
}
Expand Down

0 comments on commit 12c8ee0

Please sign in to comment.