1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
use proc_macro2::Ident;
use syn::{
parse::{Parse, ParseStream},
LitStr, Token,
};
pub(crate) struct StrArg<T> {
pub(crate) value: LitStr,
_p: std::marker::PhantomData<T>,
}
impl<T: Parse> Parse for StrArg<T> {
fn parse(input: ParseStream<'_>) -> syn::Result<Self> {
let _ = input.parse::<T>()?;
let _ = input.parse::<Token![=]>()?;
let value = input.parse()?;
Ok(Self {
value,
_p: std::marker::PhantomData,
})
}
}
pub(crate) struct IdentArg<T> {
pub(crate) value: Ident,
_p: std::marker::PhantomData<T>,
}
impl<T: Parse> Parse for IdentArg<T> {
fn parse(input: ParseStream) -> syn::Result<Self> {
let _ = input.parse::<T>()?;
let _ = input.parse::<Token![=]>()?;
let value = input.parse()?;
Ok(Self {
value,
_p: std::marker::PhantomData,
})
}
}
|