[go: up one dir, main page]

fakeit 1.3.0

Fake data generator library with 130+ functions
Documentation
use crate::contact;
use crate::data::person;
use crate::hacker;

use crate::misc;

pub fn generate(data: String) -> String {
    let mut d_validate_left = data.matches("{").count();
    let mut d_validate_right = data.matches("}").count();

    let mut m_data = data.clone();

    while d_validate_left > 0 && d_validate_right > 0 && d_validate_left == d_validate_right {
        let place_of_left = m_data.find('{').unwrap();
        let place_of_right = m_data.find('}').unwrap();

        let tag = &m_data[place_of_left + 1..place_of_right];
        let text = resolve_tag(tag);
        let tag_formatted = format!("{}{}{}", "{", tag, "}");
        m_data = m_data.replace(&tag_formatted[..], &text[..]);

        d_validate_left = m_data.matches("{").count();
        d_validate_right = m_data.matches("}").count();
    }

    m_data = misc::replace_with_numbers(m_data);
    m_data = misc::replace_with_letter(m_data);

    m_data
}

fn resolve_tag(tag: &str) -> String {
    match tag {
        "contact.email" => return contact::email(),
        "hacker.abbreviation" => return hacker::abbreviation(),
        "hacker.adjective" => return hacker::adjective(),
        "hacker.noun" => return hacker::noun(),
        "hacker.verb" => return hacker::verb(),
        "hacker.ingverb" => return hacker::ingverb(),
        "person.first" => return misc::random_data(person::FIRST).to_string(),
        "person.last" => return misc::random_data(person::LAST).to_string(),

        _ => return "".to_string(),
    }
}

#[cfg(test)]
mod tests {
    use crate::generator;
    use crate::testify::exec_mes;

    #[test]
    fn generate() {
        exec_mes("beer::name", || {
            generator::generate("{person.first} {person.last} {contact.email} #?#?#?".to_string())
        });
    }
}