lib3d6/
lib.rs

1use proc_macro::TokenStream;
2use std::io::Write;
3
4
5fn _format(input: TokenStream) -> TokenStream {
6    let mut var_vector: Vec<String> = Vec::new();
7    let mut print_string = String::new();
8
9    let mut buffer = String::new();
10    let mut is_var: bool = false;
11    let mut first: bool = true;
12    for token in input.to_string().chars() {
13        if first {
14            if token != 'f' {
15                let mut output = "std::format!(".to_owned();
16                output.push_str(&input.to_string());
17                output.push_str(")");
18                let stream: TokenStream = output.parse().unwrap();
19                return stream
20            } else {
21                first = false;
22                continue
23            }
24        }
25        let token: String = token.to_string();
26        if token.eq("{") {
27            is_var = true;
28            print_string += "{:?}";
29        } else if token.eq("}") {
30            is_var = false;
31            var_vector.push(buffer);
32            buffer = String::new();
33        } else if is_var {
34            buffer.push_str(&token);
35        } else {
36            print_string.push_str(&token);
37        }
38    }
39
40    let mut output = "std::format!(".to_owned();
41    output.push_str(&print_string);
42    output.push_str(", ");
43    output.push_str(&var_vector.join(","));
44    output.push_str(")");
45    let stream: TokenStream = output.parse().unwrap();
46    return stream
47}
48
49
50#[proc_macro]
51pub fn format(input: TokenStream) -> TokenStream {
52    _format(input)
53}
54
55
56#[proc_macro]
57pub fn print(input: TokenStream) -> TokenStream {
58    let formated: String = _format(input).to_string();
59    let mut buffer = "std::print!(\"{}\", ".to_owned();
60    buffer.push_str(&formated);
61    buffer.push_str(")");
62    let stream: TokenStream = buffer.parse().unwrap();
63    return stream
64}
65
66
67#[proc_macro]
68pub fn println(input: TokenStream) -> TokenStream {
69    let formated: String = _format(input).to_string();
70    let mut buffer = "std::println!(\"{}\", ".to_owned();
71    buffer.push_str(&formated);
72    buffer.push_str(")");
73    let stream: TokenStream = buffer.parse().unwrap();
74    return stream
75}
76
77
78#[cfg(test)]
79mod tests {
80}