diff options
Diffstat (limited to 'src/bitmap.rs')
-rw-r--r-- | src/bitmap.rs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/bitmap.rs b/src/bitmap.rs index 2bf8556..8010a4b 100644 --- a/src/bitmap.rs +++ b/src/bitmap.rs | |||
@@ -4,6 +4,8 @@ use std::{ | |||
4 | ops::{Add, Sub}, | 4 | ops::{Add, Sub}, |
5 | }; | 5 | }; |
6 | 6 | ||
7 | use crate::lisp::{error::EvalError, expr::LispExpr}; | ||
8 | |||
7 | #[derive(Debug)] | 9 | #[derive(Debug)] |
8 | pub struct Pixmap<T> { | 10 | pub struct Pixmap<T> { |
9 | pub width: u32, | 11 | pub width: u32, |
@@ -71,12 +73,38 @@ impl Sub for MapPoint { | |||
71 | } | 73 | } |
72 | } | 74 | } |
73 | 75 | ||
74 | #[derive(Debug, Copy, Clone)] | 76 | #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] |
75 | pub enum Axis { | 77 | pub enum Axis { |
76 | X, | 78 | X, |
77 | Y, | 79 | Y, |
78 | } | 80 | } |
79 | 81 | ||
82 | impl Into<LispExpr> for Axis { | ||
83 | fn into(self) -> LispExpr { | ||
84 | LispExpr::Quote( | ||
85 | Box::new(LispExpr::Ident(match self { | ||
86 | Self::X => "X".into(), | ||
87 | Self::Y => "Y".into(), | ||
88 | })), | ||
89 | 1, | ||
90 | ) | ||
91 | } | ||
92 | } | ||
93 | |||
94 | impl TryFrom<&LispExpr> for Axis { | ||
95 | type Error = EvalError; | ||
96 | fn try_from(value: &LispExpr) -> Result<Self, Self::Error> { | ||
97 | match value { | ||
98 | LispExpr::Ident(id) => match id.as_ref() { | ||
99 | "x" => Ok(Axis::X), | ||
100 | "y" => Ok(Axis::Y), | ||
101 | _ => Err(EvalError::TypeMismatch), | ||
102 | }, | ||
103 | _ => Err(EvalError::TypeMismatch), | ||
104 | } | ||
105 | } | ||
106 | } | ||
107 | |||
80 | #[derive(Debug, Copy, Clone)] | 108 | #[derive(Debug, Copy, Clone)] |
81 | pub enum Quadrant { | 109 | pub enum Quadrant { |
82 | I, | 110 | I, |