lib3d6 0.0.4

Potentially my personal utility library, for now a test
Documentation
use proc_macro::TokenStream;
use std::io::Write;


fn _format(input: TokenStream) -> TokenStream {
    let mut var_vector: Vec<String> = Vec::new();
    let mut print_string = String::new();

    let mut buffer = String::new();
    let mut is_var: bool = false;
    let mut first: bool = true;
    for token in input.to_string().chars() {
        if first {
            if token != 'f' {
                let mut output = "std::format!(".to_owned();
                output.push_str(&input.to_string());
                output.push_str(")");
                let stream: TokenStream = output.parse().unwrap();
                return stream
            } else {
                first = false;
                continue
            }
        }
        let token: String = token.to_string();
        if token.eq("{") {
            is_var = true;
            print_string += "{:?}";
        } else if token.eq("}") {
            is_var = false;
            var_vector.push(buffer);
            buffer = String::new();
        } else if is_var {
            buffer.push_str(&token);
        } else {
            print_string.push_str(&token);
        }
    }

    let mut output = "std::format!(".to_owned();
    output.push_str(&print_string);
    output.push_str(", ");
    output.push_str(&var_vector.join(","));
    output.push_str(")");
    let stream: TokenStream = output.parse().unwrap();
    return stream
}


#[proc_macro]
pub fn format(input: TokenStream) -> TokenStream {
    _format(input)
}


#[proc_macro]
pub fn print(input: TokenStream) -> TokenStream {
    let formated: String = _format(input).to_string();
    let mut buffer = "std::print!(\"{}\", ".to_owned();
    buffer.push_str(&formated);
    buffer.push_str(")");
    let stream: TokenStream = buffer.parse().unwrap();
    return stream
}


#[proc_macro]
pub fn println(input: TokenStream) -> TokenStream {
    let formated: String = _format(input).to_string();
    let mut buffer = "std::println!(\"{}\", ".to_owned();
    buffer.push_str(&formated);
    buffer.push_str(")");
    let stream: TokenStream = buffer.parse().unwrap();
    return stream
}


#[cfg(test)]
mod tests {
}