1#[cfg(feature = "std")]
2use crate::grid::config;
3
4/// The structure represents an offset in a text.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
6pub 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")]
14impl 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
23impl 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
33impl 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
43impl 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
53impl From<usize> for Offset {
54 fn from(value: usize) -> Self {
55 Offset::Begin(value)
56 }
57}
58