python/
integer.rs

1use std::fmt;
2use crate::_Object;
3use crate::type_of;
4use crate::_Hashable;
5
6
7#[derive(Copy)]
8#[derive(Clone)]
9#[derive(Default)]
10#[derive(Hash)]
11#[derive(Eq)]
12#[derive(PartialEq)]
13/// Int struct, holds and _integer: i32
14pub struct Int<T: Sized> {
15    _integer: T,
16}
17
18impl<T> _Hashable for Int<T> {
19}
20
21
22/// Int::new(_anything_)
23impl<T> Int<T>
24where
25    T: Sized,
26{
27    /// create a new Int object
28    ///
29    /// let integer = Int::new(123)
30    pub fn new(_integer: T) -> Self {
31        Int {
32            _integer,
33        }
34    }
35}
36
37
38/// Int::from(&str)
39impl From<&str> for Int<i32> {
40    /// create new Int object from static str
41    /// usage
42    /// let integer = Int::from_str("123")
43    fn from(_static_string: &str) -> Self {
44        let mut _integer: i32 = 0;
45        for _char in _static_string.chars() {
46            _integer =
47                _integer * 10 + _char.to_digit(10).unwrap() as i32;
48        }
49        Int {
50            _integer,
51        }
52    }
53}
54
55
56/// Int::from(&str)
57impl From<&str> for Int<i64> {
58    /// create new Int object from static str
59    /// usage
60    /// let integer = Int::from_str("123")
61    fn from(_static_string: &str) -> Self {
62        let mut _integer: i64 = 0;
63        for _char in _static_string.chars() {
64            _integer =
65                _integer * 10 + _char.to_digit(10).unwrap() as i64;
66        }
67        Int {
68            _integer,
69        }
70    }
71}
72
73
74impl<T> From<T> for Int<T>
75where
76    T: Sized,
77{
78    /// this can be any of
79    /// i8, i16, i32, i64, i128, i256
80    /// u8, u16, u32, u64, u128, u256
81    /// usize
82    fn from(_integer: T) -> Self {
83        Int {
84            _integer,
85        }
86    }
87}
88
89/// object trait
90impl<T> _Object for Int<T>
91where
92    T: Sized + fmt::Display,
93{
94    fn __repr__(&self) -> String {
95        format!("{}", self._integer)
96    }
97
98    fn __str__(&self) -> String {
99        format!("{}", self._integer)
100    }
101}
102
103
104/// display print
105impl<T> fmt::Display for Int<T>
106where
107    T: Sized + fmt::Display,
108{
109    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
110        write!(f, "{}", self._integer)
111    }
112}
113
114
115/// debug print
116impl<T> fmt::Debug for Int<T>
117where
118    T: Sized + fmt::Debug + fmt::Display,
119{
120    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
121        let _type = type_of(&self._integer);
122        write!(f, "Int<{}> {{ _integer: {} }}", _type, self._integer)
123    }
124}