extern crate serde_json;
use serde::Deserialize;
use std::collections::HashMap;
use crate::color::color;
use crate::config::{Colors, Fonts, Options};
use crate::debug::{d, Dt};
#[derive(Deserialize)]
pub struct Font {
pub name: String,
pub version: String,
pub homepage: String,
pub colors: usize,
pub lines: usize,
pub buffer: Vec<String>,
pub letterspace: Vec<String>,
pub letterspace_size: usize,
pub chars: HashMap<String, Vec<String>>,
}
pub fn load_all_fonts() -> HashMap<Fonts, &'static str> {
let mut fonts = HashMap::new();
let font_content = include_str!("../fonts/console.json");
fonts.insert(Fonts::FontConsole, font_content);
let font_content = include_str!("../fonts/block.json");
fonts.insert(Fonts::FontBlock, font_content);
let font_content = include_str!("../fonts/simpleBlock.json");
fonts.insert(Fonts::FontSimpleBlock, font_content);
let font_content = include_str!("../fonts/simple.json");
fonts.insert(Fonts::FontSimple, font_content);
let font_content = include_str!("../fonts/3d.json");
fonts.insert(Fonts::Font3d, font_content);
let font_content = include_str!("../fonts/simple3d.json");
fonts.insert(Fonts::FontSimple3d, font_content);
let font_content = include_str!("../fonts/chrome.json");
fonts.insert(Fonts::FontChrome, font_content);
let font_content = include_str!("../fonts/huge.json");
fonts.insert(Fonts::FontHuge, font_content);
let font_content = include_str!("../fonts/shade.json");
fonts.insert(Fonts::FontShade, font_content);
let font_content = include_str!("../fonts/slick.json");
fonts.insert(Fonts::FontSlick, font_content);
let font_content = include_str!("../fonts/grid.json");
fonts.insert(Fonts::FontGrid, font_content);
let font_content = include_str!("../fonts/pallet.json");
fonts.insert(Fonts::FontPallet, font_content);
let font_content = include_str!("../fonts/tiny.json");
fonts.insert(Fonts::FontTiny, font_content);
fonts
}
pub fn get(fonts: &HashMap<Fonts, &'static str>, options: &Options) -> Font {
d("font::get()", 5, Dt::Head, options, &mut std::io::stdout());
d(&format!("font::get()\noptions.font{:?}", options.font), 5, Dt::Log, options, &mut std::io::stdout());
let data = fonts.get(&options.font).unwrap();
serde_json::from_str(data).unwrap_or_else(|error| {
panic!(
"JSON parsing error encountered for: \"{}\"\nError: {}",
color(&format!("{:?}", options.font), Colors::Red),
color(&format!("{}", error), Colors::Yellow)
)
})
}