random-zh 0.1.3

A Rust crate for generating random Chinese characters.
Documentation
use std::collections::HashMap;

pub struct Data {
    pub levels: HashMap<u8, Vec<char>>,
    pub stroke_counts: HashMap<u8, Vec<char>>,
}

impl Data {
    pub fn new() -> Self {
        Self {
            levels: Self::load_and_parse_json(include_str!("../levels.json")),
            stroke_counts: Self::load_and_parse_json(include_str!("../stroke-count.json")),
        }
    }

    fn load_and_parse_json(content: &str) -> HashMap<u8, Vec<char>> {
        load_json::<HashMap<String, String>>(content)
            .into_iter()
            .map(|(k, v)| {
                (
                    k.parse::<u8>().expect("Invalid key format"),
                    v.chars().collect(),
                )
            })
            .collect()
    }
}

fn load_json<T: for<'de> serde::Deserialize<'de>>(content: &str) -> T {
    serde_json::from_str(content).expect("Failed to parse JSON")
}