sct_reader/loaders/euroscope/
line.rs1use 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}