mod private
{
extern crate alloc;
use crate :: *;
pub trait AsMuchAsPossibleNoDelimiter {}
pub trait Element
where
Self: quote ::ToTokens,
{
}
impl< T > Element for T where
Self: quote ::ToTokens,
{
}
#[ derive( Debug, PartialEq, Eq, Clone, Default ) ]
pub struct Pair< T1: Element, T2: Element >(pub T1, pub T2);
impl< T1, T2 > Pair< T1, T2 >
where
T1: Element,
T2: Element,
{
pub fn new(src1: T1, src2: T2) -> Self
{
Self(src1, src2)
}
}
impl< T1, T2 > From< (T1, T2) > for Pair< T1, T2 >
where
T1: Element,
T2: Element,
{
#[ inline( always ) ]
fn from(src: (T1, T2)) -> Self
{
Self(src.0, src.1)
}
}
impl< T1, T2 > From< Pair<T1, T2 >> for (T1, T2)
where
T1: Element,
T2: Element,
{
#[ inline( always ) ]
fn from(src: Pair< T1, T2 >) -> Self
{
(src.0, src.1)
}
}
impl< T1, T2 > syn ::parse ::Parse for Pair< T1, T2 >
where
T1: Element + syn ::parse ::Parse,
T2: Element + syn ::parse ::Parse,
{
fn parse(input: ParseStream< '_ >) -> syn ::Result< Self >
{
Ok(Self(input.parse()?, input.parse()?))
}
}
impl< T1, T2 > quote ::ToTokens for Pair< T1, T2 >
where
T1: Element + quote ::ToTokens,
T2: Element + quote ::ToTokens,
{
fn to_tokens(&self, tokens: &mut proc_macro2 ::TokenStream)
{
self.0.to_tokens(tokens);
self.1.to_tokens(tokens);
}
}
#[ derive( Debug, PartialEq, Eq, Clone, Default ) ]
pub struct Many< T: quote ::ToTokens >(pub Vec< T >);
impl< T > Many< T >
where
T: Element,
{
#[ must_use ]
pub fn new() -> Self
{
Self(Vec ::new())
}
#[ must_use ]
pub fn new_with(src: Vec< T >) -> Self
{
Self(src)
}
pub fn iter( &self ) -> core ::slice ::Iter< '_, T >
{
self.0.iter()
}
}
impl< T > From< Vec< T >> for Many< T >
where
T: quote ::ToTokens,
{
#[ inline( always ) ]
fn from(src: Vec< T >) -> Self
{
Self(src)
}
}
impl< T > From< Many<T >> for Vec< T >
where
T: quote ::ToTokens,
{
#[ inline( always ) ]
fn from(src: Many< T >) -> Self
{
src.0
}
}
impl< T > IntoIterator for Many< T >
where
T: quote ::ToTokens,
{
type Item = T;
#[ allow( clippy ::std_instead_of_alloc ) ]
type IntoIter = alloc ::vec ::IntoIter< Self ::Item >;
fn into_iter(self) -> Self ::IntoIter
{
self.0.into_iter()
}
}
impl< 'a, T > IntoIterator for &'a Many< T >
where
T: quote ::ToTokens,
{
type Item = &'a T;
type IntoIter = core ::slice ::Iter< 'a, T >;
fn into_iter(self) -> Self ::IntoIter
{
(self.0).iter()
}
}
impl< T > quote ::ToTokens for Many< T >
where
T: Element + quote ::ToTokens,
{
fn to_tokens(&self, tokens: &mut proc_macro2 ::TokenStream)
{
use crate ::quote ::TokenStreamExt;
tokens.append_all(self.0.iter());
}
}
impl< T > syn ::parse ::Parse for Many< T >
where
T: Element + syn ::parse ::Parse + AsMuchAsPossibleNoDelimiter,
{
fn parse(input: syn ::parse ::ParseStream< '_ >) -> syn ::Result< Self >
{
let mut items = vec![];
while !input.is_empty()
{
let item: T = input.parse()?;
items.push(item);
}
Ok(Self(items))
}
}
}
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use own :: *;
#[ allow( unused_imports ) ]
pub mod own
{
use super :: *;
#[ doc( inline ) ]
pub use orphan :: *;
}
#[ allow( unused_imports ) ]
pub mod orphan
{
use super :: *;
#[ doc( inline ) ]
pub use exposed :: *;
}
#[ allow( unused_imports ) ]
pub mod exposed
{
use super :: *;
pub use super ::super ::quantifier;
#[ doc( inline ) ]
pub use prelude :: *;
#[ doc( inline ) ]
pub use private :: { AsMuchAsPossibleNoDelimiter, Pair, Many };
}
#[ allow( unused_imports ) ]
pub mod prelude
{
use super :: *;
#[ doc( inline ) ]
pub use private :: { };
}