1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use ::syn::{parse, token::Eq, LitStr};

/// The value of an attribute like `#[key = "value"]`.
pub struct AttrValue<T> {
    /// The `=` token between the key and value.
    pub eq_token: Eq,
    /// The value parsed from a string literal.
    pub value: T,
}

impl<T: parse::Parse> parse::Parse for AttrValue<T> {
    fn parse(input: parse::ParseStream) -> parse::Result<Self> {
        Ok(AttrValue {
            eq_token: input.parse::<Eq>()?,
            value: input.parse::<LitStr>()?.parse::<T>()?,
        })
    }
}