#![deny(clippy::all)] #![deny(clippy::pedantic)] #![deny(missing_docs)] //! Internal macros used by tests. use std::iter::repeat; use proc_macro::TokenStream; use quote::quote; use syn::parse::Parse; use syn::{parse_macro_input, LitChar, LitInt, Token}; /// Repeats a character N number of times. #[proc_macro] pub fn repeat_char(input: TokenStream) -> TokenStream { let RepeatMacroArgs { character, count } = parse_macro_input!(input as RepeatMacroArgs); let repeated = repeat(character.value()).take(count).collect::(); quote! { #repeated } .into() } struct RepeatMacroArgs { character: LitChar, count: usize, } impl Parse for RepeatMacroArgs { fn parse(input: syn::parse::ParseStream) -> syn::Result { let character = input.parse::()?; input.parse::()?; let count = input.parse::()?.base10_parse::()?; Ok(Self { character, count }) } }