papergrid/config/
offset.rs

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