blob: 981df869a9ee7f1b436cc8f5dc5db4035b2aa5bc [file] [log] [blame]
use quote::quote;
use syn::Result;
use super::test_derive;
#[test]
fn basic() -> Result<()> {
test_derive(
quote! {
#[derive_where(Deserialize, Serialize)]
struct Test<T>(std::marker::PhantomData<T>);
},
quote! {
#[::core::prelude::v1::derive(::serde::Deserialize)]
#[serde(bound(deserialize = ""))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize)]
struct Test<T>(std::marker::PhantomData<T>);
#[::core::prelude::v1::derive(::serde::Serialize)]
#[serde(bound(serialize = ""))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize)]
struct Test<T>(std::marker::PhantomData<T>);
},
)
}
#[test]
fn bound() -> Result<()> {
test_derive(
quote! {
#[derive_where(Deserialize, Serialize; T)]
struct Test<T, U>(T, std::marker::PhantomData<U>);
},
quote! {
#[::core::prelude::v1::derive(::serde::Deserialize)]
#[serde(bound(deserialize = "T : :: serde :: Deserialize < 'de >"))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize; T)]
struct Test<T, U>(T, std::marker::PhantomData<U>);
#[::core::prelude::v1::derive(::serde::Serialize)]
#[serde(bound(serialize = "T : :: serde :: Serialize"))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize; T)]
struct Test<T, U>(T, std::marker::PhantomData<U>);
},
)
}
#[test]
fn bound_two() -> Result<()> {
test_derive(
quote! {
#[derive_where(Deserialize, Serialize; T, U)]
struct Test<T, U, V>(T, U, std::marker::PhantomData<V>);
},
quote! {
#[::core::prelude::v1::derive(::serde::Deserialize)]
#[serde(bound(deserialize = "T : :: serde :: Deserialize < 'de > , U : :: serde :: Deserialize < 'de >"))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize; T, U)]
struct Test<T, U, V>(T, U, std::marker::PhantomData<V>);
#[::core::prelude::v1::derive(::serde::Serialize)]
#[serde(bound(serialize = "T : :: serde :: Serialize , U : :: serde :: Serialize"))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize; T, U)]
struct Test<T, U, V>(T, U, std::marker::PhantomData<V>);
},
)
}
#[test]
fn attribute() -> Result<()> {
test_derive(
quote! {
#[derive_where(Deserialize, Serialize)]
#[serde(test_attribute)]
struct Test<T>(std::marker::PhantomData<T>);
},
quote! {
#[::core::prelude::v1::derive(::serde::Deserialize)]
#[serde(bound(deserialize = ""))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize)]
#[serde(test_attribute)]
struct Test<T>(std::marker::PhantomData<T>);
#[::core::prelude::v1::derive(::serde::Serialize)]
#[serde(bound(serialize = ""))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize)]
#[serde(test_attribute)]
struct Test<T>(std::marker::PhantomData<T>);
},
)
}
#[test]
fn crate_() -> Result<()> {
test_derive(
quote! {
#[derive_where(Deserialize, Serialize)]
#[serde(crate = "serde_")]
struct Test<T>(std::marker::PhantomData<T>);
},
quote! {
#[::core::prelude::v1::derive(serde_::Deserialize)]
#[serde(bound(deserialize = ""))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize)]
#[serde(crate = "serde_")]
struct Test<T>(std::marker::PhantomData<T>);
#[::core::prelude::v1::derive(serde_::Serialize)]
#[serde(bound(serialize = ""))]
#[::derive_where::derive_where_serde]
#[derive_where(Deserialize, Serialize)]
#[serde(crate = "serde_")]
struct Test<T>(std::marker::PhantomData<T>);
},
)
}