ral-macro 0.2.0

The ral procedural macro implementations
Documentation
use std::fmt::Display;
use std::str::FromStr;

use proc_macro2::TokenStream;
use quote::ToTokens;
use syn::{LitInt, Result};

pub(super) struct _Spanned<T> {
    pub(super) value: T,
    pub(super) lit: LitInt,
}

impl<T> ToTokens for _Spanned<T> {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        self.lit.to_tokens(tokens)
    }
}

impl<T: FromStr> _Spanned<T>
where
    <T as FromStr>::Err: Display,
{
    pub(super) fn from(lit: Result<LitInt>) -> Result<_Spanned<T>> {
        let lit = lit?;

        T::from_str(lit.base10_digits())
            .map_err(|err| syn::Error::new(lit.span(), format!("Failed to parse value: {}", err)))
            .map(|value| _Spanned { value, lit })
    }
}