diff --git a/Cargo.toml b/Cargo.toml index 9a7cada..ce998ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,13 +18,16 @@ keywords = ["data-structure", "no_std"] categories = ["data-structures", "no-std"] [dependencies] -serde = { version = "1.0", optional = true, features = ["derive"] } +serde_crate = { package = "serde", version = "1.0.186", optional = true } +serde_derive = { version = "1.0.0", optional = true } [features] default = ["use_std"] +serde = ["serde_crate", "serde_derive"] use_std = [] [dev-dependencies] +serde_crate = { package = "serde", version = "1.0.0", features = ["derive"] } serde_json = "1.0.0" [package.metadata.release] diff --git a/src/lib.rs b/src/lib.rs index d7fbf2c..2ae3447 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -45,7 +45,11 @@ pub use crate::Either::{Left, Right}; /// The `Either` type is symmetric and treats its variants the same way, without /// preference. /// (For representing success or error, use the regular `Result` enum instead.) -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[cfg_attr( + feature = "serde", + derive(serde_derive::Serialize, serde_derive::Deserialize), + serde(crate = "serde_crate") +)] #[derive(Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] pub enum Either { /// A value of type `L`. diff --git a/src/serde_untagged.rs b/src/serde_untagged.rs index 72078c3..c41dad5 100644 --- a/src/serde_untagged.rs +++ b/src/serde_untagged.rs @@ -6,11 +6,13 @@ //! but in typical cases Vec would suffice, too. //! //! ```rust +//! # use serde_crate as serde; //! # fn main() -> Result<(), Box> { //! use either::Either; //! use std::collections::HashMap; //! //! #[derive(serde::Serialize, serde::Deserialize, Debug)] +//! # #[serde(crate = "serde")] //! #[serde(transparent)] //! struct IntOrString { //! #[serde(with = "either::serde_untagged")] @@ -33,10 +35,12 @@ //! # } //! ``` -use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde_crate::de::{Deserialize, Deserializer}; +use serde_crate::ser::{Serialize, Serializer}; +use serde_derive::{Deserialize, Serialize}; -#[derive(serde::Serialize, serde::Deserialize)] -#[serde(untagged)] +#[derive(Serialize, Deserialize)] +#[serde(crate = "serde_crate", untagged)] enum Either { Left(L), Right(R), diff --git a/src/serde_untagged_optional.rs b/src/serde_untagged_optional.rs index fb3239a..231e8c8 100644 --- a/src/serde_untagged_optional.rs +++ b/src/serde_untagged_optional.rs @@ -6,11 +6,13 @@ //! but in typical cases Vec would suffice, too. //! //! ```rust +//! # use serde_crate as serde; //! # fn main() -> Result<(), Box> { //! use either::Either; //! use std::collections::HashMap; //! //! #[derive(serde::Serialize, serde::Deserialize, Debug)] +//! # #[serde(crate = "serde")] //! #[serde(transparent)] //! struct IntOrString { //! #[serde(with = "either::serde_untagged_optional")] @@ -33,10 +35,12 @@ //! # } //! ``` -use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde_crate::de::{Deserialize, Deserializer}; +use serde_crate::ser::{Serialize, Serializer}; +use serde_derive::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] -#[serde(untagged)] +#[serde(crate = "serde_crate", untagged)] enum Either { Left(L), Right(R),