1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//! Shape conversion
//!
//! Circle -> Rect
//!
//! Line -> Rect
//!
//! Rect -> Line
//!

use crate::shapes::circle::Circle;
use crate::shapes::line::Line;
use crate::shapes::rect::Rect;
use crate::shapes::{DrawType, Shape};

impl From<Circle> for Rect {
    fn from(circle: Circle) -> Self {
        let center = circle.center();
        let r = circle.radius() as isize;
        Rect::new(
            (center.x - r, center.y - r),
            (center.x + r, center.y + r),
            circle.draw_type(),
        )
    }
}

impl From<Line> for Rect {
    fn from(line: Line) -> Self {
        Rect::new(line.points()[0], line.points()[1], line.draw_type())
    }
}

impl From<Rect> for Line {
    fn from(rect: Rect) -> Self {
        let color = match rect.draw_type() {
            DrawType::Stroke(c) => c,
            DrawType::Fill(c) => c,
        };
        Line::new(rect.points()[0], rect.points()[1], color)
    }
}