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
in Rust 1.77 or nightly-2024-02-08 and older, the error you get is:
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>
Whereas with Rust 1.78-beta, nightly-2024-02-09 or newer:
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 --> /home/david/.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!(), |
The text was updated successfully, but these errors were encountered:
The current approach was put in place before serde_json had a build.rs. But now we have a build.rs anyway for a different reason, that might be a better place to do this check, if it can produce a good enough error.
error: serde_json requires that either `std` (default) or `alloc` feature is enabled --> serde-json/src/lib.rs:367:1 |367 | / compile_error! {368 | | "serde_json requires that either `std` (default) or `alloc` feature is enabled"369 | | } | |_^error: could not compile `serde_json` (lib) due to 1 previous error
Instead with this code in build.rs:
ifcfg!(not(any(feature = "std", feature = "alloc"))){eprintln!("serde_json requires that either `std` (default) or `alloc` feature is enabled");
process::exit(1);}
error: failed to run custom build command for `serde_json v1.0.115`Caused by: process didn't exit successfully: `target/debug/build/serde_json-9e37cf325e9030a2/build-script-build` (exit status: 1) --- stderr serde_json requires that either `std` (default) or `alloc` feature is enabled
Some old workarounds that we could drop if build.rs does the check, meaning the library code would never even begin to build with an invalid combination of features: #643.
This bisects to a regression in nightly-2024-02-09, and specifically rust-lang/rust#120550. I noticed this while testing #1124.
For the following dependency:
in Rust 1.77 or nightly-2024-02-08 and older, the error you get is:
Whereas with Rust 1.78-beta, nightly-2024-02-09 or newer:
The text was updated successfully, but these errors were encountered: