Macro zalgo_codec_macro::zalgo_embed
source · 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.