use serde_derive::{Serialize, Deserialize}; use crate::colour::Colour; use std::fs; #[derive(Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct Palette { pub name: String, pub colours: Vec, } impl Palette { pub fn from(name: &str, toml: &str) -> Self { let intermediate: IntermediatePalette = toml::from_str(toml).unwrap(); println!("palette name: {}", name); for colour in &intermediate.colours { println!("palette colour: {}{}{}", colour[0], colour[1], colour[2]); } Palette { name: name.to_string(), colours: intermediate.colours.iter().map(|vec| { Colour::from(vec.clone()) }).collect(), } } pub fn from_file(path: String) -> Self { // todo get name without extension let name = "blah"; let toml = fs::read_to_string(path).unwrap(); Self::from(name, &toml) } } /// for toml purposes #[derive(Serialize, Deserialize)] pub struct IntermediatePalette { pub colours: Vec>, } /// for toml purposes #[derive(Serialize, Deserialize)] struct IntermediatePalettes { /// singular so each palette section is named "palette" instead of "palettes" in toml palette: Vec, } impl IntermediatePalettes { pub fn from_dir() -> Self { Self { palette: vec![] } } } #[cfg(test)] mod test { use crate::Palette; #[test] fn test_palette_from_toml() { let output = Palette::from( "blueprint", include_str!("test-resources/basic/palettes/blueprint.toml") ); let expected = crate::mock::palette::default(); assert_eq!(output, expected); } #[test] fn test_palette_to_toml() { let intermediate = crate::mock::palette::intermediate(); let output = toml::to_string(&intermediate).unwrap(); let expected = include_str!("test-resources/basic/palettes/blueprint.toml"); assert_eq!(&output, expected); } }