mock_json 0.1.8

A very simple mock json tool
Documentation
use crate::mock::{format_datetime, MockFn};
use rand::Rng;
use serde_json::{json, Value};

#[derive(Debug, Default, Clone)]
pub struct MockDateFn;
impl MockFn for MockDateFn {
    fn mock(&self, args: Option<Vec<&str>>) -> Value {
        let format = args
            .as_ref()
            .and_then(|args| args.first())
            .unwrap_or(&"YYYY-MM-DD");
        let mut rng = rand::thread_rng();
        let year = rng.gen_range(1900..2100);
        let month = rng.gen_range(1..13);
        let day = rng.gen_range(1..=31);
        json!(format_datetime(format, year, month, day, 0, 0, 0))
    }
}

#[derive(Debug, Default, Clone)]
pub struct MockTimeFn;
impl MockFn for MockTimeFn {
    fn mock(&self, args: Option<Vec<&str>>) -> Value {
        let format = args
            .as_ref()
            .and_then(|args| args.first())
            .unwrap_or(&"hh:mm:ss");
        let mut rng = rand::thread_rng();
        let hour = rng.gen_range(1..=23);
        let minute = rng.gen_range(0..=59);
        let second = rng.gen_range(0..=59);
        json!(format_datetime(format, 2000, 0, 0, hour, minute, second))
    }
}

#[derive(Debug, Default, Clone)]
pub struct MockDateTimeFn;
impl MockFn for MockDateTimeFn {
    fn mock(&self, args: Option<Vec<&str>>) -> Value {
        let format = args
            .as_ref()
            .and_then(|args| args.first())
            .unwrap_or(&"YYYY-MM-DD hh:mm:ss");
        let mut rng = rand::thread_rng();
        let year = rng.gen_range(1900..2100);
        let month = rng.gen_range(1..13);
        let day = rng.gen_range(1..=31);
        let hour = rng.gen_range(1..=23);
        let minute = rng.gen_range(0..=59);
        let second = rng.gen_range(0..=59);
        json!(format_datetime(
            format, year, month, day, hour, minute, second
        ))
    }
}

#[derive(Debug, Default, Clone)]
pub struct MockTimestampFn;
impl MockFn for MockTimestampFn {
    fn mock(&self, _: Option<Vec<&str>>) -> Value {
        let mut rng = rand::thread_rng();
        json!(rng.gen_range::<u64, _>(1600000000000..1900000000000))
    }
}