l10n_impl 0.1.3

Proc macros for l10n.
Documentation
use crate::message::{expand as expand_message, MessageInput};
use proc_macro2::TokenStream;
use quote::quote;
use syn::parse::{Parse, ParseStream};
use syn::{Ident, Result, Token};

pub fn expand(input: TranslateInput) -> Result<TokenStream> {
    let locale = input.locale;
    let message_expanded = expand_message(input.message_input)?;

    Ok(quote! {
        {
            use ::l10n::L10nMessage;
            #message_expanded.translate(#locale)
        }
    })
}

pub struct TranslateInput {
    locale: Ident,
    pub message_input: MessageInput,
}

impl Parse for TranslateInput {
    fn parse(input: ParseStream) -> Result<Self> {
        let locale = input.parse()?;
        input.parse::<Token![,]>()?;
        let message_input = input.parse()?;

        Ok(Self {
            locale,
            message_input,
        })
    }
}