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}