art_concepts/
lib.rs

1//! # Art
2//!
3//! A library for modeling artistic concepts.
4
5//re-exporting: so public API users don't have to know internal organization
6pub use self::kinds::PrimaryColor;
7pub use self::kinds::SecondaryColor;
8pub use self::utils::mix;
9
10pub mod kinds {
11    // The primary colors according to the RYB color model.
12    pub enum PrimaryColor {
13        Red,
14        Yellow,
15        Blue,
16    }
17
18    // The secondary colors according to the RYB color model.
19    pub enum SecondaryColor {
20        Orange,
21        Green,
22        Purple,
23    }
24}
25
26pub mod utils {
27    use crate::kinds::*;
28
29    //Combines two primary colors in equal amounts to create
30    //a secondary color.
31    pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
32        match (c1, c2) {
33            (PrimaryColor::Red, PrimaryColor::Yellow) => SecondaryColor::Orange,
34            (PrimaryColor::Yellow, PrimaryColor::Red) => SecondaryColor::Orange,
35            (PrimaryColor::Blue, PrimaryColor::Yellow) => SecondaryColor::Green,
36            (PrimaryColor::Yellow, PrimaryColor::Blue) => SecondaryColor::Green,
37            (PrimaryColor::Blue, PrimaryColor::Red) => SecondaryColor::Purple,
38            (PrimaryColor::Red, PrimaryColor::Blue) => SecondaryColor::Purple,
39            _ => {
40                panic!("Invalid color combination");
41            }
42        }
43    }
44}