#[doc(hidden)]
#[macro_export]
macro_rules! internal_impl {
($store:ident | $type:ident impl $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Trait;
$store.assert(Trait::from_owned(parse_quote!($tokens)).test::<TokenCmpWrapper<syn::Type>>($type));
}
};
($store:ident | &$type:ident impl $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Trait;
$store.assert(Trait::from_owned(parse_quote!($tokens)).test::<TokenCmpWrapper<syn::Type>>(&$type));
}
};
($store:ident | $type:ident with $generics:ident impl $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Trait;
$store.assert(
Trait::from_owned(parse_quote!($tokens))
.with_generics::<TokenCmpWrapper<syn::Type>>($generics)
.test::<TokenCmpWrapper<syn::Type>>($type),
);
}
};
($store:ident | $type:ident with &$generics:ident impl $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Trait;
$store.assert(
Trait::from_owned(parse_quote!($tokens))
.with_generics::<TokenCmpWrapper<syn::Type>>(&$generics)
.test::<TokenCmpWrapper<syn::Type>>($type),
);
}
};
($store:ident | &$type:ident with $generics:ident impl $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Trait;
$store.assert(
Trait::from_owned(parse_quote!($tokens))
.with_generics::<TokenCmpWrapper<syn::Type>>($generics)
.test::<TokenCmpWrapper<syn::Type>>(&$type),
);
}
};
($store:ident | &$type:ident with &$generics:ident impl $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Trait;
$store.assert(
Trait::from_owned(parse_quote!($tokens))
.with_generics::<TokenCmpWrapper<syn::Type>>(&$generics)
.test::<TokenCmpWrapper<syn::Type>>(&$type),
);
}
};
($store:ident | $type:ident == $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(Type::from_owned(parse_quote!($tokens), 0).test::<TokenCmpWrapper<syn::Type>>($type));
}
};
($store:ident | &$type:ident == $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(Type::from_owned(parse_quote!($tokens), 0).test::<TokenCmpWrapper<syn::Type>>(&$type));
}
};
($store:ident | $type:ident with $generics:ident == $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), 0)
.with_generics::<TokenCmpWrapper<syn::Type>>($generics)
.test::<TokenCmpWrapper<syn::Type>>($type),
);
}
};
($store:ident | $type:ident with &$generics:ident == $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), 0)
.with_generics::<TokenCmpWrapper<syn::Type>>(&$generics)
.test::<TokenCmpWrapper<syn::Type>>($type),
);
}
};
($store:ident | &$type:ident with $generics:ident == $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), 0)
.with_generics::<TokenCmpWrapper<syn::Type>>($generics)
.test::<TokenCmpWrapper<syn::Type>>(&$type),
);
}
};
($store:ident | &$type:ident with &$generics:ident == $tokens:tt) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), 0)
.with_generics::<TokenCmpWrapper<syn::Type>>(&$generics)
.test::<TokenCmpWrapper<syn::Type>>($type),
);
}
};
($store:ident | $type:ident == $tokens:tt<#$num:literal>) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(Type::from_owned(parse_quote!($tokens), $num).test::<TokenCmpWrapper<syn::Type>>($type));
}
};
($store:ident | &$type:ident == $tokens:tt<#$num:literal>) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(Type::from_owned(parse_quote!($tokens), $num).test::<TokenCmpWrapper<syn::Type>>(&$type));
}
};
($store:ident | $type:ident with $generics:ident == $tokens:tt<#$num:literal>) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), $num)
.with_generics::<TokenCmpWrapper<syn::Type>>($generics)
.test::<TokenCmpWrapper<syn::Type>>($type),
);
}
};
($store:ident | $type:ident with &$generics:ident == $tokens:tt<#$num:literal>) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), $num)
.with_generics::<TokenCmpWrapper<syn::Type>>(&$generics)
.test::<TokenCmpWrapper<syn::Type>>($type),
);
}
};
($store:ident | &$type:ident with $generics:ident == $tokens:tt<#$num:literal>) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), $num)
.with_generics::<TokenCmpWrapper<syn::Type>>($generics)
.test::<TokenCmpWrapper<syn::Type>>(&$type),
);
}
};
($store:ident | &$type:ident with &$generics:ident == $tokens:tt<#$num:literal>) => {
{
internal_impl!(@internal imports);
use $crate::generatable::Type;
$store.assert(
Type::from_owned(parse_quote!($tokens), $num)
.with_generics::<TokenCmpWrapper<syn::Type>>(&$generics)
.test::<TokenCmpWrapper<syn::Type>>(&$type),
);
}
};
(@internal imports) => {
#[allow(unused_imports)]
use $crate::maybe_borrowed::FromMaybeBorrowed;
use $crate::add_generics::AttachGenericsWithAssert;
use $crate::assert::InsertIntoTemplate;
use $crate::token_cmp_wrapper::TokenCmpWrapper;
use syn::parse_quote;
};
}
#[macro_export]
macro_rules! assert_into {
( $($hidden:tt)* ) => {
{
use $crate::internal_impl;
internal_impl!($($hidden)*);
}
};
}