#[cfg(feature = "kmeans")]
use crate::kmeans::KmeansOptions;
use crate::{CreatePaletteBufError, PaletteBuf, PaletteInColorSpace};
use alloc::vec::Vec;
use palette::{Oklab, Srgb};
#[derive(Debug, Clone, PartialEq)]
pub enum QuantizeMethod {
CustomPalette(PaletteInColorSpace),
Wu,
#[cfg(feature = "kmeans")]
Kmeans(KmeansOptions),
}
impl QuantizeMethod {
#[cfg(feature = "kmeans")]
#[must_use]
pub const fn kmeans() -> Self {
Self::Kmeans(KmeansOptions::new())
}
}
impl From<PaletteInColorSpace> for QuantizeMethod {
#[inline]
fn from(palette: PaletteInColorSpace) -> Self {
Self::CustomPalette(palette)
}
}
impl From<PaletteBuf<Srgb<u8>>> for QuantizeMethod {
#[inline]
fn from(palette: PaletteBuf<Srgb<u8>>) -> Self {
Self::CustomPalette(palette.into())
}
}
impl From<PaletteBuf<Oklab>> for QuantizeMethod {
#[inline]
fn from(palette: PaletteBuf<Oklab>) -> Self {
Self::CustomPalette(palette.into())
}
}
#[cfg(feature = "kmeans")]
impl From<KmeansOptions> for QuantizeMethod {
#[inline]
fn from(options: KmeansOptions) -> Self {
Self::Kmeans(options)
}
}
impl TryFrom<Vec<Srgb<u8>>> for QuantizeMethod {
type Error = CreatePaletteBufError<Srgb<u8>>;
#[inline]
fn try_from(colors: Vec<Srgb<u8>>) -> Result<Self, Self::Error> {
PaletteBuf::try_from(colors).map(Into::into)
}
}
impl TryFrom<Vec<Oklab>> for QuantizeMethod {
type Error = CreatePaletteBufError<Oklab>;
#[inline]
fn try_from(colors: Vec<Oklab>) -> Result<Self, Self::Error> {
PaletteBuf::try_from(colors).map(Into::into)
}
}