Files
peachy/src/palette.rs

81 lines
2.0 KiB
Rust
Raw Normal View History

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<Colour>,
}
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<Vec<u8>>,
}
/// for toml purposes
#[derive(Serialize, Deserialize)]
struct IntermediatePalettes {
/// singular so each palette section is named "palette" instead of "palettes" in toml
palette: Vec<IntermediatePalette>,
}
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);
}
}