sct_reader/loaders/euroscope/
line.rs

1use super::{colour::Colour, position::{Position, Valid}};
2
3
4pub trait Line {
5    fn start(&self) -> Position<Valid>;
6    fn end(&self) -> Position<Valid>;
7}
8
9#[derive(Debug, Clone, Copy, PartialEq)]
10pub struct SimpleLine {
11    pub start: Position<Valid>,
12    pub end: Position<Valid>,
13}
14impl SimpleLine {
15    pub fn new(start: Position<Valid>, end: Position<Valid>) -> SimpleLine {
16        SimpleLine { start, end }
17    }
18}
19impl Line for SimpleLine {
20    fn start(&self) -> Position<Valid> {
21        self.start
22    }
23    fn end(&self) -> Position<Valid> {
24        self.end
25    }
26}
27
28#[derive(Debug, Clone, Copy, PartialEq)]
29pub struct ColouredLine {
30    pub line: SimpleLine,
31    pub colour: Option<Colour>,
32}
33impl ColouredLine {
34    pub fn new(
35        start: Position<Valid>,
36        end: Position<Valid>,
37        colour: Option<Colour>,
38    ) -> ColouredLine {
39        ColouredLine {
40            line: SimpleLine::new(start, end),
41            colour,
42        }
43    }
44    pub fn colour(&self) -> Option<Colour> {
45        self.colour
46    }
47}
48impl Line for ColouredLine {
49    fn start(&self) -> Position<Valid> {
50        self.line.start
51    }
52    fn end(&self) -> Position<Valid> {
53        self.line.end
54    }
55}
56
57#[derive(Debug)]
58pub struct LineGroup<L: Line> {
59    pub name: String,
60    pub lines: Vec<L>,
61}
62impl<L: Line> LineGroup<L> {
63    pub fn new(name: String, lines: Vec<L>) -> LineGroup<L> {
64        LineGroup { name, lines }
65    }
66    pub fn name(&self) -> &str {
67        &self.name
68    }
69}