zalgo_embed!() { /* proc-macro */ }
Expand description

This macro decodes a string that has been encoded with zalgo_encode and passes the results on to the compiler.

Examples

We can use a function created in encoded source code:

// This line expands to the code
// `fn add(x: i32, y: i32) -> i32 {x + y}`
zalgo_embed!("E͎͉͙͉̞͉͙͆̀́̈́̈́̈̀̓̒̌̀̀̓̒̉̀̍̀̓̒̀͛̀̋̀͘̚̚͘͝");

// Now the `add` function is available
assert_eq!(add(10, 20), 30);

It works on expressions too!

let x = 20;
let y = -10;

// This macro is expanded to the code
// `x + y`
let z = zalgo_embed!("È͙̋̀͘");
assert_eq!(z, x + y);

A more complex example is this program which expands to code that reads the command line input, encodes it, and prints out the result.

use zalgo_codec_common::{zalgo_encode, Error};
use zalgo_codec_macro::zalgo_embed;

fn main() -> Result<(), Error> {
    // This macro expands to
    // let input = std::env::args().collect::<Vec<_>>()[1..].join(" ");
    // let output = zalgo_encode(&input)?;
    // println!("{}", output);
    zalgo_embed!("E͔͉͎͕͔̝͓͔͎͖͇͓͌̀͐̀̀̈́́͒̈̉̎̓̚̚̚̚ͅͅ͏̶͔̜̜̞̞̻͌͌̓̓̿̈̉̑̎̎̽̎͊̚̚ͅͅ͏̛͉͎͔̈̂̀̂̉ͯ͌̀ͅ͏͕͔͕͔̝͚͇͐̀̀́͌͏͎̿̓ͅ͏̛͉͎͕͔̟͉͎͔͎̼͎̼͎̈́̈̆͐̉ͯ͐͒͌́̈̂͛̂̌̀͝ͅ͏̛͕͔͕͔͐̉");
    Ok(())
}

Do the opposite of obfstr: obfuscate a string while coding and deobfuscate it during compile time

let secret_string = zalgo_embed!("Ê̤͏͎͔͔͈͉͓͍̇̀͒́̈́̀̀ͅ͏͍́̂");
assert_eq!(secret_string, "Don't read this mom!");

Limitations

The encoded code must be valid macro output.