ColorGenerator

Struct ColorGenerator 

Source
pub struct ColorGenerator { /* private fields */ }
Expand description

A type that can generate distinct 8-bit colors.

Implementations§

Source§

impl ColorGenerator

Source

pub fn from_state(state: [u16; 3], min_brightness: f32) -> Self

Create a new ColorGenerator with the given pre-chosen state.

The minimum brightness can be used to control the colour brightness (0.0 - 1.0). The default is 0.5.

Source

pub fn new() -> Self

Create a new ColorGenerator with the default state.

Examples found in repository?
examples/multifile.rs (line 4)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let c = colors.next();
10
11    Report::build(ReportKind::Error, "b.tao", 10)
12        .with_code(3)
13        .with_message(format!("Cannot add types Nat and Str"))
14        .with_label(Label::new(("b.tao", 10..14))
15            .with_message(format!("This is of type {}", "Nat".fg(a)))
16            .with_color(a))
17        .with_label(Label::new(("b.tao", 17..20))
18            .with_message(format!("This is of type {}", "Str".fg(b)))
19            .with_color(b))
20        .with_label(Label::new(("b.tao", 15..16))
21            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
22            .with_color(c)
23            .with_order(10))
24        .with_label(Label::new(("a.tao", 4..8))
25            .with_message(format!("Original definition of {} is here", "five".fg(a)))
26            .with_color(a))
27        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
28        .finish()
29        .print(sources(vec![
30            ("a.tao", include_str!("a.tao")),
31            ("b.tao", include_str!("b.tao")),
32        ]))
33        .unwrap();
34}
More examples
Hide additional examples
examples/multiline.rs (line 4)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate & choose some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let out = Color::Fixed(81);
10    let out2= colors.next();
11
12    Report::build(ReportKind::Error, "sample.tao", 12)
13        .with_code(3)
14        .with_message(format!("Incompatible types"))
15        .with_label(Label::new(("sample.tao", 32..33))
16            .with_message(format!("This is of type {}", "Nat".fg(a)))
17            .with_color(a))
18        .with_label(Label::new(("sample.tao", 42..45))
19            .with_message(format!("This is of type {}", "Str".fg(b)))
20            .with_color(b))
21        .with_label(Label::new(("sample.tao", 11..48))
22            .with_message(format!(
23                "The values are outputs of this {} expression",
24                "match".fg(out),
25            ))
26            .with_color(out))
27        .with_label(Label::new(("sample.tao", 0..48))
28            .with_message(format!(
29                "The {} has a problem",
30                "definition".fg(out2),
31            ))
32            .with_color(out2))
33        .with_label(Label::new(("sample.tao", 50..76))
34            .with_message(format!(
35                "Usage of {} here",
36                "definition".fg(out2),
37            ))
38            .with_color(out2))
39        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
40        .finish()
41        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
42        .unwrap();
43}
examples/stresstest.rs (line 4)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    Report::build(ReportKind::Error, "stresstest.tao", 13)
7        .with_code(3)
8        .with_message(format!("Incompatible types"))
9        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
10        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
11        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
12        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
13        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
14        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
15        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
16        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
17        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
18        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
19        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
20        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
21        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
22        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
23        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
24        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
25        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
26        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
27        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
28        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
29        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))
30
31        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
32        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
33        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
34        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
35        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
36        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
37        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
38        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
39        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
40        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
41        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
42        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
43        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
44        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
45        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
46        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
47        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
48        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
49        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
50        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
51        .with_config(Config::default()
52            .with_cross_gap(false)
53            .with_compact(true)
54            .with_underlines(true)
55            .with_tab_width(4))
56        .finish()
57        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
58        .unwrap();
59}
Source

pub fn next(&mut self) -> Color

Generate the next colour in the sequence.

Examples found in repository?
examples/multifile.rs (line 7)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let c = colors.next();
10
11    Report::build(ReportKind::Error, "b.tao", 10)
12        .with_code(3)
13        .with_message(format!("Cannot add types Nat and Str"))
14        .with_label(Label::new(("b.tao", 10..14))
15            .with_message(format!("This is of type {}", "Nat".fg(a)))
16            .with_color(a))
17        .with_label(Label::new(("b.tao", 17..20))
18            .with_message(format!("This is of type {}", "Str".fg(b)))
19            .with_color(b))
20        .with_label(Label::new(("b.tao", 15..16))
21            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
22            .with_color(c)
23            .with_order(10))
24        .with_label(Label::new(("a.tao", 4..8))
25            .with_message(format!("Original definition of {} is here", "five".fg(a)))
26            .with_color(a))
27        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
28        .finish()
29        .print(sources(vec![
30            ("a.tao", include_str!("a.tao")),
31            ("b.tao", include_str!("b.tao")),
32        ]))
33        .unwrap();
34}
More examples
Hide additional examples
examples/multiline.rs (line 7)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate & choose some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let out = Color::Fixed(81);
10    let out2= colors.next();
11
12    Report::build(ReportKind::Error, "sample.tao", 12)
13        .with_code(3)
14        .with_message(format!("Incompatible types"))
15        .with_label(Label::new(("sample.tao", 32..33))
16            .with_message(format!("This is of type {}", "Nat".fg(a)))
17            .with_color(a))
18        .with_label(Label::new(("sample.tao", 42..45))
19            .with_message(format!("This is of type {}", "Str".fg(b)))
20            .with_color(b))
21        .with_label(Label::new(("sample.tao", 11..48))
22            .with_message(format!(
23                "The values are outputs of this {} expression",
24                "match".fg(out),
25            ))
26            .with_color(out))
27        .with_label(Label::new(("sample.tao", 0..48))
28            .with_message(format!(
29                "The {} has a problem",
30                "definition".fg(out2),
31            ))
32            .with_color(out2))
33        .with_label(Label::new(("sample.tao", 50..76))
34            .with_message(format!(
35                "Usage of {} here",
36                "definition".fg(out2),
37            ))
38            .with_color(out2))
39        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
40        .finish()
41        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
42        .unwrap();
43}
examples/stresstest.rs (line 9)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    Report::build(ReportKind::Error, "stresstest.tao", 13)
7        .with_code(3)
8        .with_message(format!("Incompatible types"))
9        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
10        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
11        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
12        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
13        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
14        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
15        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
16        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
17        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
18        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
19        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
20        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
21        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
22        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
23        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
24        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
25        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
26        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
27        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
28        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
29        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))
30
31        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
32        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
33        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
34        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
35        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
36        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
37        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
38        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
39        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
40        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
41        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
42        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
43        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
44        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
45        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
46        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
47        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
48        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
49        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
50        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
51        .with_config(Config::default()
52            .with_cross_gap(false)
53            .with_compact(true)
54            .with_underlines(true)
55            .with_tab_width(4))
56        .finish()
57        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
58        .unwrap();
59}

Trait Implementations§

Source§

impl Default for ColorGenerator

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.