#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum RenderingIntent {
Perceptual,
RelativeColorimetric,
Saturation,
AbsoluteColorimetric,
}
impl RenderingIntent {
pub fn to_moxcms(self) -> moxcms::RenderingIntent {
match self {
RenderingIntent::Perceptual => moxcms::RenderingIntent::Perceptual,
RenderingIntent::RelativeColorimetric => {
moxcms::RenderingIntent::RelativeColorimetric
}
RenderingIntent::Saturation => moxcms::RenderingIntent::Saturation,
RenderingIntent::AbsoluteColorimetric => {
moxcms::RenderingIntent::AbsoluteColorimetric
}
}
}
pub fn from_moxcms(intent: moxcms::RenderingIntent) -> Self {
match intent {
moxcms::RenderingIntent::Perceptual => RenderingIntent::Perceptual,
moxcms::RenderingIntent::RelativeColorimetric => {
RenderingIntent::RelativeColorimetric
}
moxcms::RenderingIntent::Saturation => RenderingIntent::Saturation,
moxcms::RenderingIntent::AbsoluteColorimetric => {
RenderingIntent::AbsoluteColorimetric
}
}
}
}
impl Default for RenderingIntent {
fn default() -> Self {
RenderingIntent::Perceptual
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_perceptual() {
assert_eq!(RenderingIntent::default(), RenderingIntent::Perceptual);
}
#[test]
fn round_trip_through_moxcms() {
let intents = [
RenderingIntent::Perceptual,
RenderingIntent::RelativeColorimetric,
RenderingIntent::Saturation,
RenderingIntent::AbsoluteColorimetric,
];
for intent in intents {
let mox = intent.to_moxcms();
let back = RenderingIntent::from_moxcms(mox);
assert_eq!(intent, back);
}
}
}