mosaic_derive/lib.rs
1#![doc = include_str!("../README.md")]
2
3use proc_macro::TokenStream;
4use proc_macro2::TokenStream as TokenStream2;
5
6mod embed;
7
8use embed::Embed;
9
10
11/// Embed a sequence of tokens.
12///
13/// This macro allows you to embed and transform arbitrary tokens.
14///
15/// # Example
16///
17/// ```rust
18/// # use tokel::embed;
19///
20/// embed! {
21/// [< (hello [world]) >]; // Expands to `(hello [world])`.
22/// [< (hello [world]):stringify >]; // Expands to `"(hello [world])"`.
23/// [< (hello [world]):ungroup >]; // Expands to `hello [world]`.
24/// }
25/// ```
26#[proc_macro]
27pub fn embed(input: TokenStream) -> TokenStream {
28 let input = TokenStream2::from(input);
29
30 Embed::recursively_expand(input)
31 .unwrap_or_else(|err| err.into_compile_error())
32 .into()
33}