use crate::__attr_parse_prelude::*;
use syn::parse::{Parse, ParseStream};
#[derive(Debug, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)]
#[repr(transparent)]
pub struct ParseWrapper<T>(T);
impl<T> ParseWrapper<T> {
#[allow(missing_docs)]
#[inline]
pub const fn new(inner: T) -> Self {
Self(inner)
}
#[inline]
pub fn inner(self) -> T {
self.0
}
pub fn parse_self(input: ParseStream) -> syn::Result<T>
where
T: ParseOption,
{
Ok(Self::parse(input)?.inner())
}
pub fn parse_stream_self(input: proc_macro2::TokenStream) -> syn::Result<T>
where
T: ParseOption,
{
Ok(syn::parse2::<Self>(input)?.inner())
}
}
impl<T: ParseOption> Parse for ParseWrapper<T> {
fn parse(input: ParseStream) -> syn::Result<Self> {
Ok(Self::new(T::from_stream(input)?))
}
}