vibrance/
functions.rs

1use crate::{
2    traits::Colourisable,
3    strings::ColouredString,
4    consts::Formatting
5};
6
7
8/// Generates a function which takes in a `Colourisable`
9/// and returns a formatted string.
10macro_rules! function {
11    ($name:ident,$value:expr) => {
12        function!($name(), $value);
13    };
14    ($name:ident($($arg_name:ident:$arg_type:ty),*),$value:expr) => {
15        /// A formatting function.
16        pub fn $name<S : Colourisable>(from : S, $($arg_name:$arg_type),*) -> ColouredString {
17            from.formatted(vec!($value))
18        }
19    };
20}
21
22
23/// Text styling functions.
24pub mod style {
25    use super::*;
26    function!(bold          , Formatting::Bold          );
27    function!(faint         , Formatting::Faint         );
28    function!(italic        , Formatting::Italic        );
29    function!(underline     , Formatting::Underline     );
30    function!(slow_blink    , Formatting::SlowBlink     );
31    function!(fast_blink    , Formatting::FastBlink     );
32    function!(invert        , Formatting::Invert        );
33    function!(conceal       , Formatting::Conceal       );
34    function!(strikethrough , Formatting::Strikethrough );
35    function!(overline      , Formatting::Overline      );
36    /// Text styling removal functions.
37    pub mod reset {
38        use super::*;
39        function!(intensity     , Formatting::ResetIntensity     );
40        function!(italic        , Formatting::ResetItalic        );
41        function!(underline     , Formatting::ResetUnderline     );
42        function!(slow_blink    , Formatting::ResetSlowBlink     );
43        function!(fast_blink    , Formatting::ResetFastBlink     );
44        function!(invert        , Formatting::ResetInvert        );
45        function!(conceal       , Formatting::ResetConceal       );
46        function!(strikethrough , Formatting::ResetStrikethrough );
47        function!(overline      , Formatting::ResetOverline      );
48    }
49}
50/// Text foreground setting functions.
51pub mod fg {
52    use super::*;
53    function!(black                   , Formatting::FgBlack         );
54    function!(red                     , Formatting::FgRed           );
55    function!(green                   , Formatting::FgGreen         );
56    function!(yellow                  , Formatting::FgYellow        );
57    function!(blue                    , Formatting::FgBlue          );
58    function!(magenta                 , Formatting::FgMagenta       );
59    function!(cyan                    , Formatting::FgCyan          );
60    function!(white                   , Formatting::FgWhite         );
61    function!(bright_black            , Formatting::FgBrightBlack   );
62    function!(bright_red              , Formatting::FgBrightRed     );
63    function!(bright_green            , Formatting::FgBrightGreen   );
64    function!(bright_yellow           , Formatting::FgBrightYellow  );
65    function!(bright_blue             , Formatting::FgBrightBlue    );
66    function!(bright_magenta          , Formatting::FgBrightMagenta );
67    function!(bright_cyan             , Formatting::FgBrightCyan    );
68    function!(bright_white            , Formatting::FgBrightWhite   );
69    function!(cbit_8(n:u8)            , Formatting::Fg8Bit(n)       );
70    function!(cbit_24(r:u8,g:u8,b:u8) , Formatting::Fg24Bit(r,g,b)  );
71    function!(reset                   , Formatting::FgReset         );
72}
73/// Text background setting functions.
74pub mod bg {
75    use super::*;
76    function!(black                   , Formatting::BgBlack         );
77    function!(red                     , Formatting::BgRed           );
78    function!(green                   , Formatting::BgGreen         );
79    function!(yellow                  , Formatting::BgYellow        );
80    function!(blue                    , Formatting::BgBlue          );
81    function!(magenta                 , Formatting::BgMagenta       );
82    function!(cyan                    , Formatting::BgCyan          );
83    function!(white                   , Formatting::BgWhite         );
84    function!(bright_black            , Formatting::BgBrightBlack   );
85    function!(bright_red              , Formatting::BgBrightRed     );
86    function!(bright_green            , Formatting::BgBrightGreen   );
87    function!(bright_yellow           , Formatting::BgBrightYellow  );
88    function!(bright_blue             , Formatting::BgBrightBlue    );
89    function!(bright_magenta          , Formatting::BgBrightMagenta );
90    function!(bright_cyan             , Formatting::BgBrightCyan    );
91    function!(bright_white            , Formatting::BgBrightWhite   );
92    function!(cbit_8(n:u8)            , Formatting::Bg8Bit(n)       );
93    function!(cbit_24(r:u8,g:u8,b:u8) , Formatting::Bg24Bit(r,g,b)  );
94    function!(reset                   , Formatting::BgReset         );
95}