use crate::{Colormap, DiscretePalette};
#[cfg(any(feature = "alloc", feature = "std"))]
use {crate::ColormapKind, alloc::vec::Vec};
fn for_each_colormap(mut f: impl FnMut(&'static Colormap)) {
#[cfg(feature = "matplotlib")]
for cm in crate::matplotlib::ALL {
f(cm);
}
#[cfg(feature = "crameri")]
for cm in crate::crameri::ALL {
f(cm);
}
#[cfg(feature = "cet")]
for cm in crate::cet::ALL {
f(cm);
}
#[cfg(feature = "cmocean")]
for cm in crate::cmocean::ALL {
f(cm);
}
#[cfg(feature = "colorbrewer")]
for cm in crate::colorbrewer::ALL {
f(cm);
}
#[cfg(feature = "cmasher")]
for cm in crate::cmasher::ALL {
f(cm);
}
#[cfg(feature = "ncar")]
for cm in crate::ncar::ALL {
f(cm);
}
#[cfg(feature = "cartocolors")]
for cm in crate::cartocolors::ALL {
f(cm);
}
#[cfg(feature = "moreland")]
for cm in crate::moreland::ALL {
f(cm);
}
#[cfg(feature = "d3")]
for cm in crate::d3::ALL {
f(cm);
}
let _ = &mut f;
}
fn for_each_discrete_palette(mut f: impl FnMut(&'static DiscretePalette)) {
#[cfg(feature = "colorbrewer")]
for p in crate::colorbrewer::ALL_DISCRETE {
f(p);
}
#[cfg(feature = "cartocolors")]
for p in crate::cartocolors::ALL_DISCRETE {
f(p);
}
#[cfg(feature = "d3")]
for p in crate::d3::ALL_DISCRETE {
f(p);
}
let _ = &mut f;
}
#[must_use]
#[cfg(any(feature = "alloc", feature = "std"))]
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
pub fn all_colormaps() -> Vec<&'static Colormap> {
let mut result = Vec::new();
for_each_colormap(|cm| result.push(cm));
result
}
#[must_use]
pub fn find_by_name(name: &str) -> Option<&'static Colormap> {
let mut found = None;
for_each_colormap(|cm| {
if cm.meta.name == name {
found = Some(cm);
}
});
found
}
#[must_use]
#[cfg(any(feature = "alloc", feature = "std"))]
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
pub fn filter_by_kind(kind: ColormapKind) -> Vec<&'static Colormap> {
let mut result = Vec::new();
for_each_colormap(|cm| {
if cm.meta.kind == kind {
result.push(cm);
}
});
result
}
#[must_use]
#[cfg(any(feature = "alloc", feature = "std"))]
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
pub fn filter_by_collection(collection: &str) -> Vec<&'static Colormap> {
let mut result = Vec::new();
for_each_colormap(|cm| {
if cm.meta.collection == collection {
result.push(cm);
}
});
result
}
#[must_use]
#[cfg(any(feature = "alloc", feature = "std"))]
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
pub fn all_discrete_palettes() -> Vec<&'static DiscretePalette> {
let mut result = Vec::new();
for_each_discrete_palette(|p| result.push(p));
result
}
#[must_use]
pub fn find_palette_by_name(name: &str) -> Option<&'static DiscretePalette> {
let mut found = None;
for_each_discrete_palette(|p| {
if p.meta.name == name {
found = Some(p);
}
});
found
}