data-faking 0.1.2

Generate massive amounts of fake data
Documentation
use std::collections::HashMap;
use crate::utils::seeder;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn user_agent(agent: Option<String>) -> String {
  let mut vendor: String = "".to_owned();
  if let Some(arg) = agent {
    vendor.replace_range(.., &arg);
  } else {
    vendor.replace_range(.., &random_vendor())
  }

  let agents = AGENT_HASHMAP.get(vendor.as_str());
  if let Some(arg) = agents {
    return arg.to_string();
  }

  "".to_owned()
}

fn random_vendor() -> String {
  VENDOR_LIST[seeder::gen_range(0..VENDOR_LIST_LEN)].to_owned()
}

static VENDOR_AOL: &str = "aol";
static AGENT_AOL: &str = "Mozilla/5.0 (compatible; MSIE 9.0; AOL 9.7; AOLBuild 4343.19; Windows NT 6.1; WOW64; Trident/5.0; FunWebProducts)";

static VENDOR_CHROME: &str = "chrome";
static AGENT_CHROME: &str = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";

static VENDOR_FIREFOX: &str = "firefox";
static AGENT_FIREFOX: &str = "Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0";

static VENDOR_IE: &str = "internet_explorer";
static AGENT_IE: &str = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko";

static VENDOR_NETSCAPE: &str = "netscape";
static AGENT_NETSCAPE: &str = "Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285";

static VENDOR_OPERA: &str = "opera";
static AGENT_OPERA: &str = "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16";

static VENDOR_SAFARI: &str = "safari";
static AGENT_SAFARI: &str = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A";

static VENDOR_LIST: [&'static str; 7] = [
  VENDOR_AOL,
  VENDOR_CHROME,
  VENDOR_FIREFOX,
  VENDOR_IE,
  VENDOR_NETSCAPE,
  VENDOR_OPERA,
  VENDOR_SAFARI
];
static VENDOR_LIST_LEN: usize = VENDOR_LIST.len();

lazy_static! {
  static ref AGENT_HASHMAP: HashMap<&'static str, &'static str> = {
    let mut m = HashMap::new();
    m.insert(
      VENDOR_AOL,
      AGENT_AOL
    );

    m.insert(
      VENDOR_CHROME,
      AGENT_CHROME
    );

    m.insert(
      VENDOR_FIREFOX,
      AGENT_FIREFOX
    );

    m.insert(
      VENDOR_IE,
      AGENT_IE
    );

    m.insert(
      VENDOR_NETSCAPE,
      AGENT_NETSCAPE
    );

    m.insert(
      VENDOR_OPERA,
      AGENT_OPERA
    );

    m.insert(
      VENDOR_SAFARI,
      AGENT_SAFARI
    );
    m
  };
}