1 use crate::units::Units;
2 
3 #[derive(Debug, PartialEq, Clone)]
4 pub struct CmykRatio {
5   pub(crate) units: Units,
6 }
7 
8 impl CmykRatio {
new(c: f64, m: f64, y: f64, k: f64, a: f64) -> Self9   pub fn new(c: f64, m: f64, y: f64, k: f64, a: f64) -> Self {
10     let mut u = Units::new_ratios(&[c, m, y, k]);
11     u.alpha.set(a);
12     CmykRatio::from_units(u)
13   }
14 
cyan(&self) -> f6415   pub fn cyan(&self) -> f64 { self.units[0] }
magenta(&self) -> f6416   pub fn magenta(&self) -> f64 { self.units[1] }
yellow(&self) -> f6417   pub fn yellow(&self) -> f64 { self.units[2] }
key(&self) -> f6418   pub fn key(&self) -> f64 { self.units[3] }
19 
set_cyan(&mut self, c: f64)20   pub fn set_cyan(&mut self, c: f64) { self.units.list[0].set(c); }
set_magenta(&mut self, m: f64)21   pub fn set_magenta(&mut self, m: f64) { self.units.list[1].set(m); }
set_yellow(&mut self, y: f64)22   pub fn set_yellow(&mut self, y: f64) { self.units.list[2].set(y); }
set_key(&mut self, k: f64)23   pub fn set_key(&mut self, k: f64) { self.units.list[3].set(k); }
24 
from_units(u: Units) -> Self25   pub(crate) fn from_units(u: Units) -> Self {
26     CmykRatio { units: u }
27   }
28 }
29 
30 
31 impl AsRef<CmykRatio> for CmykRatio {
as_ref(&self) -> &CmykRatio32   fn as_ref(&self) -> &CmykRatio {
33     &self
34   }
35 }
36 
37 impl Default for CmykRatio {
default() -> CmykRatio38   fn default() -> CmykRatio {
39     CmykRatio::new(0.0, 0.0, 0.0, 1.0, 1.0)
40   }
41 }
42 
43 impl From<[f64; 4]> for CmykRatio {
from(a: [f64; 4]) -> Self44   fn from(a: [f64; 4]) -> Self { CmykRatio::new(a[0], a[1], a[2], a[3], 1.0) }
45 }
46 
47 impl<'a> From<&'a [f64; 4]> for CmykRatio {
from(a: &[f64; 4]) -> Self48   fn from(a: &[f64; 4]) -> Self { CmykRatio::new(a[0], a[1], a[2], a[3], 1.0) }
49 }
50 
51 impl Into<[f64; 4]> for CmykRatio {
into(self: CmykRatio) -> [f64; 4]52   fn into(self: CmykRatio) -> [f64; 4] { self.units.into() }
53 }
54 impl<'a> Into<[f64; 4]> for &'a CmykRatio {
into(self) -> [f64; 4]55   fn into(self) -> [f64; 4] { self.units.clone().into() }
56 }
57 
58 #[cfg(test)]
59 mod test {
60   use crate::{Cmyk, Rgb};
61   use crate::converters::cmyk_to_rgb;
62 
63   #[test]
cmyk_to_rbg_test()64   fn cmyk_to_rbg_test() {
65     let cmyk = Cmyk::new(30.0, 30.0, 30.0, 30.0, None);
66     let _rgb: Rgb = cmyk_to_rgb(&cmyk);
67   }
68 }
69