1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//! # My Library
//! 
//! 'my library' is a collection of utilities to make performing some tasks easier
//!

/// Adds one to the number given
/// 
/// # Examples
/// ```
/// let five = 5;
/// assert_eq!(6, my_library::add_one(5));
/// ```
pub fn add_one(val: i32) -> i32 {
    val + 1
}

/*
Since good module structure for development can be quite different from good module structure
for users of your code, you can choose to export stuff from deep in your library to be top-
level.

pub use my_module::my_submodule::my_thing;

This also affects how they show up in documentation.

*/
pub use kinds::PrimaryColor;
pub use kinds::SecondaryColor;
pub use utils::mix;

pub mod kinds {
    /// The primary colors according to the RYB color model.
    pub enum PrimaryColor {
        Red,
        Yellow,
        Blue,
    }

    /// The secondary colors according to the RYB color model.
    pub enum SecondaryColor {
        Orange,
        Green,
        Purple,
    }
}

pub mod utils {
    use crate::kinds::*;

    /// Combines two primary colors in equal amounts to create
    /// a secondary color.
    pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
        SecondaryColor::Orange
    }
}