data-faking 0.1.2

Generate massive amounts of fake data
Documentation
use chrono::NaiveDate;
use crate::utils::seeder;

pub const YEAR_EPOCH_MIN: i32 = 1970;
pub const YEAR_EPOCH_MAX: i32 = 2038;

pub fn gen_year_epoch() -> i32 {
  seeder::gen_range(YEAR_EPOCH_MIN..=YEAR_EPOCH_MAX)
}

pub const YEAR_MIN: i32 = (i32::MIN >> 13) + 1;
pub const YEAR_MAX: i32 = (i32::MAX >> 13) - 1;

// Ranges for the Naive Date max and min.
pub fn gen_year_unsafe() -> i32 {
  seeder::gen_range(YEAR_MIN..=YEAR_MAX)
}

const MONTH_MIN: u32 = 1;
const MONTH_MAX: u32 = 12;

pub fn gen_month() -> u32 {
  seeder::gen_range(MONTH_MIN..=MONTH_MAX)
}

pub fn gen_days(year: i32, month: u32) -> u32 {
  let days_max = get_days_in_month(year, month);
  seeder::gen_range(1..=days_max)
}

pub fn get_days_in_month(year: i32, month: u32) -> u32 {
  let nd = NaiveDate::from_ymd(
    match month {
      12 => year + 1,
      _ => year
    },
    match month {
      12 => 1,
      _ => month + 1
    },
    1
  ).signed_duration_since(NaiveDate::from_ymd(year, month, 1)).num_days();

  match u32::try_from(nd) {
      Ok(i) => i,
      Err(e) => panic!("{}", e)
  }
}

const HOUR_MIN: u32 = 0;
const HOUR_MAX: u32 = 23;

pub fn gen_hour() -> u32 {
  seeder::gen_range(HOUR_MIN..=HOUR_MAX)
}

const MIN_SEC_MIN: u32 = 0;
const MIN_SEC_MAX: u32 = 59;

pub fn gen_min_sec() -> u32 {
  seeder::gen_range(MIN_SEC_MIN..=MIN_SEC_MAX)
}

pub fn gen_min() -> u32 {
  gen_min_sec()
}

pub fn gen_sec() -> u32 {
  gen_min_sec()
}

pub fn gen_hms() -> (u32, u32, u32) {
  let h = gen_hour();
  let m = gen_min();
  let s = gen_sec();
  return (h, m, s);
}

const MILLI_MIN: u32 = 0;
const MILLI_MAX: u32 = 999;

pub fn gen_milli() -> u32 {
  seeder::gen_range(MILLI_MIN..=MILLI_MAX)
}

const MICRO_MIN: u32 = 0;
const MICRO_MAX: u32 = 999_999;

pub fn gen_micro() -> u32 {
  seeder::gen_range(MICRO_MIN..=MICRO_MAX)
}

const NANO_MIN: u32 = 0;
const NANO_MAX: u32 = 999_999_999;

pub fn gen_nano() -> u32 {
  seeder::gen_range(NANO_MIN..=NANO_MAX)
}