1#![no_std]
2#![warn(missing_docs)]
3#![doc = include_str!("../README.md")]
4
5#[cfg(feature = "std")]
6extern crate std;
7
8mod operations;
9
10use core::marker::PhantomData;
11
12pub use colr_types::*;
13
14#[repr(transparent)]
19#[derive(Debug, Clone, Copy, PartialEq)]
20pub struct Color<S, M>
21where
22 S: Copy,
23 M: BackingStore<S>,
24{
25 storage: S,
26 _model: PhantomData<M>,
27}
28
29pub type SpectralColor31Radiance = Color<[f32; 31], model::Spectral31Radiance>;
31pub type SpectralColor31Reflectance = Color<[f32; 31], model::Spectral31Reflectance>;
33pub type SpectralColor31Transmittance = Color<[f32; 31], model::Spectral31Transmittance>;
35
36pub type SpectralColor36Radiance = Color<[f32; 36], model::Spectral36Radiance>;
38pub type SpectralColor36Reflectance = Color<[f32; 36], model::Spectral36Reflectance>;
40pub type SpectralColor36Transmittance = Color<[f32; 36], model::Spectral36Transmittance>;
42
43pub type SpectralColor41Radiance = Color<[f32; 41], model::Spectral41Radiance>;
45pub type SpectralColor41Reflectance = Color<[f32; 41], model::Spectral41Reflectance>;
47pub type SpectralColor41Transmittance = Color<[f32; 41], model::Spectral41Transmittance>;
49
50pub type SpectralColor81Radiance = Color<[f32; 81], model::Spectral81Radiance>;
52pub type SpectralColor81Reflectance = Color<[f32; 81], model::Spectral81Reflectance>;
54pub type SpectralColor81Transmittance = Color<[f32; 81], model::Spectral81Transmittance>;
56
57impl<S, M> Color<S, M>
58where
59 S: Copy,
60 M: BackingStore<S>,
61{
62 #[inline(always)]
64 pub fn new(storage: S) -> Self {
65 Self {
66 storage,
67 _model: PhantomData,
68 }
69 }
70
71 #[inline(always)]
73 pub fn inner(&self) -> S {
74 self.storage
75 }
76}