use std::io::Write;
#[derive(Copy, Clone)]
pub enum SvgColor {
Rgb(u8, u8, u8),
Rgba(u8, u8, u8, f64),
RgbPercentage(f64, f64, f64),
RgbaPercentage(f64, f64, f64, f64),
Hsl(f64, usize, usize),
}
impl SvgColor {
pub(crate) fn write_fill(&self, writer: &mut dyn Write) {
self.write_internal("fill", writer);
}
pub(crate) fn write_stroke(&self, writer: &mut dyn Write) {
self.write_internal("stroke", writer);
}
fn write_internal(&self, what: &str, writer: &mut dyn Write) {
#![allow(clippy::panic)]
#![allow(clippy::unwrap_used)]
match self {
Self::Rgb(r, g, b) => {
writer
.write_all(format!(" {what}=\"rgb({r}, {g}, {b})\"").as_bytes())
.unwrap();
}
Self::RgbPercentage(r, g, b) => {
writer
.write_all(format!(" {what}=\"rgb({r}%, {g}%, {b}%)\"").as_bytes())
.unwrap();
}
Self::Hsl(hue, saturation, lightness) => {
writer
.write_all(
format!(" {what}=\"hsl({hue} {saturation}% {lightness}%)\"").as_bytes(),
)
.unwrap();
}
_ => {
panic!("Unhandled fill");
}
}
}
}