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)]
13pub struct Int<T: Sized> {
15 _integer: T,
16}
17
18impl<T> _Hashable for Int<T> {
19}
20
21
22impl<T> Int<T>
24where
25 T: Sized,
26{
27 pub fn new(_integer: T) -> Self {
31 Int {
32 _integer,
33 }
34 }
35}
36
37
38impl From<&str> for Int<i32> {
40 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
56impl From<&str> for Int<i64> {
58 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 fn from(_integer: T) -> Self {
83 Int {
84 _integer,
85 }
86 }
87}
88
89impl<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
104impl<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
115impl<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}