use gqlrs::*;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
#[repr(transparent)]
#[serde(transparent)]
struct AssetId(pub uuid::Uuid);

gqlrs::scalar!(AssetId);

#[tokio::test]
/// Test case for
/// https://github.com/async-graphql/async-graphql/issues/603
pub async fn test_serialize_uuid() {
    let generated_uuid = uuid::Uuid::new_v4();

    struct Query {
        data: AssetId,
    }

    #[Object]
    impl Query {
        async fn data(&self) -> &AssetId {
            &self.data
        }
    }

    let schema = Schema::new(
        Query {
            data: AssetId(generated_uuid),
        },
        EmptyMutation,
        EmptySubscription,
    );
    let query = r#"{ data }"#;
    assert_eq!(
        schema.execute(query).await.data,
        value!({
            "data": generated_uuid.to_string(),
        })
    );
}
