graplot/
line_desc.rs

1use litequad::color::{Color, BLUE, GREEN, RED, YELLOW};
2
3#[derive(PartialEq, Clone, Copy)]
4pub enum Marker {
5    Circle(f32),
6    None,
7}
8
9#[derive(Clone, Copy)]
10pub enum LineType {
11    Solid,
12    None,
13}
14
15#[derive(Clone, Copy)]
16pub struct LineDesc {
17    pub color: Color,
18    pub marker: Marker,
19    pub line_type: LineType,
20}
21
22impl Default for LineDesc {
23    fn default() -> Self {
24        LineDesc {
25            color: GREEN,
26            marker: Marker::None,
27            line_type: LineType::Solid,
28        }
29    }
30}
31
32impl From<&str> for LineDesc {
33    fn from(desc: &str) -> LineDesc {
34        let mut color = GREEN;
35        let mut line_type = LineType::None;
36        let mut marker = Marker::None;
37
38        let mut radius = 5.;
39
40        for char in desc.chars() {
41            match char {
42                'r' => color = RED,
43                'g' => color = GREEN,
44                'b' => color = BLUE,
45                'y' => color = YELLOW,
46                //cyan
47                'c' => color = Color::new(0., 1., 1., 1.),
48                'o' => marker = Marker::Circle(radius),
49                '-' => line_type = LineType::Solid,
50                '1'..='9' => radius = char.to_digit(10).unwrap() as f32,
51                _ => {}
52            }
53        }
54        if marker == Marker::None {
55            line_type = LineType::Solid
56        }
57        LineDesc {
58            color,
59            marker,
60            line_type,
61        }
62    }
63}