81 lines
2.0 KiB
Rust
81 lines
2.0 KiB
Rust
|
|
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);
|
||
|
|
}
|
||
|
|
}
|