1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/// Represents the different formats of betting odds.
///
/// Betting odds can be expressed in three main formats, each common in different regions:
/// - **American odds**: Used primarily in the United States (e.g., +150, -200)
/// - **Decimal odds**: Used in Europe, Australia, and Canada (e.g., 2.50, 1.50)
/// - **Fractional odds**: Traditional format used in the UK (e.g., 3/2, 1/2)
///
/// # Examples
///
/// ```
/// use odds_converter::OddsFormat;
///
/// let american = OddsFormat::American(150); // +150 American odds
/// let decimal = OddsFormat::Decimal(2.5); // 2.50 decimal odds
/// let fractional = OddsFormat::Fractional(3, 2); // 3/2 fractional odds
/// ```
/// The main odds structure that can hold any of the three odds formats.
///
/// This struct provides a unified interface for working with different odds formats,
/// allowing easy conversion between them and calculation of implied probabilities.
///
/// # Examples
///
/// ```
/// use odds_converter::Odds;
///
/// // Create odds in different formats
/// let american = Odds::new_american(150);
/// let decimal = Odds::new_decimal(2.5);
/// let fractional = Odds::new_fractional(3, 2);
///
/// // All represent the same odds
/// assert_eq!(american.to_decimal().unwrap(), 2.5);
/// assert_eq!(decimal.to_american().unwrap(), 150);
/// ```