serde/test_suite/tests
Sean Griffin a295c38ba3 Allow #[serde(serde_path = "...")] to override extern crate serde
This is intended to be used by other crates which provide their own proc
macros and use serde internally. Today there's no consistent way to put
`#[derive(Deserialize)]` on a struct that consistently works, since
crates may be using either `features = ["derive"]` or relying on
`serde_derive` separately.

Even if we assume that everyone is using `features = ["derive"]`,
without this commit, any crate which generates
`#[derive(serde::Deserialize)]` forces its consumers to put `serde` in
their `Cargo.toml`, even if they aren't otherwise using serde for
anything.

Examples of crates which suffer from this in the real world are
tower-web and swirl.

With this feature, it's expected that these crates would have `pub
extern crate serde;` in some accessible path, and add
`#[serde(serde_path = "that_crate::wherever::serde")]` anywhere they
place serde's derives. Those crates would also have to derive
`that_crate::whatever::serde::Deserialize`, or `use` the macros
explicitly beforehand.

The test for this is a little funky, as it's testing this in a way that
is not the intended use case, or even one we want to support. It has its
own module which re-exports all of serde, but defines its own
`Serialize` and `Deserialize` traits. We then test that we generated
impls for those traits, instead of serde's. The only other way to test
this would be to create a new test crate which does not depend on serde,
but instead depends on `serde_derive` and a third crate which publicly
re-exports serde. This feels like way too much overhead for a single
test case, hence the funky test given.

I didn't see anywhere in this repo to document this attribute, so I
assume the docs will have to be done as a separate PR to a separate
repo.

Fixes #1487
2019-03-18 15:20:19 -06:00
..
bytes Replace try! macro in test suite 2018-12-31 21:46:14 -05:00
macros Copyright/license headers 2018-11-24 15:53:09 -08:00
ui Simplify running update-references.sh 2019-02-17 10:58:46 -08:00
unstable Update test suite to 2018 edition 2018-12-31 21:53:37 -05:00
compiletest.rs Simplify running update-references.sh 2019-02-17 10:58:46 -08:00
test_annotations.rs Format with rustfmt 2018-12-10 2019-02-01 21:04:08 -08:00
test_borrow.rs Update test suite to 2018 edition 2018-12-31 21:53:37 -05:00
test_de.rs Format with rustfmt 2018-12-10 2019-02-01 21:04:08 -08:00
test_gen.rs Refer to Option through serde::export in generated code 2019-02-28 16:36:17 -08:00
test_identifier.rs Update test suite to 2018 edition 2018-12-31 21:53:37 -05:00
test_macros.rs Format with rustfmt 2018-12-10 2019-02-04 00:39:32 +01:00
test_remote.rs Update test suite to use tool attrs 2018-12-31 21:59:40 -05:00
test_roundtrip.rs Update test suite to 2018 edition 2018-12-31 21:53:37 -05:00
test_ser.rs Format with rustfmt 2018-12-10 2019-02-01 21:04:08 -08:00
test_serde_path.rs Allow #[serde(serde_path = "...")] to override extern crate serde 2019-03-18 15:20:19 -06:00
test_unstable.rs Update test suite to 2018 edition 2018-12-31 21:53:37 -05:00
test_value.rs Update test suite to 2018 edition 2018-12-31 21:53:37 -05:00