1 | #[cfg (feature = "std" )] |
2 | use crate::grid::config; |
3 | |
4 | /// The structure represents an offset in a text. |
5 | #[derive (Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] |
6 | pub enum Offset { |
7 | /// An offset from the start. |
8 | Begin(usize), |
9 | /// An offset from the end. |
10 | End(usize), |
11 | } |
12 | |
13 | #[cfg (feature = "std" )] |
14 | impl From<Offset> for config::Offset { |
15 | fn from(o: Offset) -> Self { |
16 | match o { |
17 | Offset::Begin(i: usize) => config::Offset::Begin(i), |
18 | Offset::End(i: usize) => config::Offset::End(i), |
19 | } |
20 | } |
21 | } |
22 | |
23 | impl From<isize> for Offset { |
24 | fn from(value: isize) -> Self { |
25 | if value > 0 { |
26 | Offset::Begin(value as usize) |
27 | } else { |
28 | Offset::End((-value) as usize) |
29 | } |
30 | } |
31 | } |
32 | |
33 | impl From<i32> for Offset { |
34 | fn from(value: i32) -> Self { |
35 | if value > 0 { |
36 | Offset::Begin(value as usize) |
37 | } else { |
38 | Offset::End((-value) as usize) |
39 | } |
40 | } |
41 | } |
42 | |
43 | impl From<i64> for Offset { |
44 | fn from(value: i64) -> Self { |
45 | if value > 0 { |
46 | Offset::Begin(value as usize) |
47 | } else { |
48 | Offset::End((-value) as usize) |
49 | } |
50 | } |
51 | } |
52 | |
53 | impl From<usize> for Offset { |
54 | fn from(value: usize) -> Self { |
55 | Offset::Begin(value) |
56 | } |
57 | } |
58 | |