1#[macro_export]
2macro_rules! separated_uint_with_output {
3 ($string:expr, $output:expr) => {{
4 let mut place = $string.len();
5 let mut later_loop = false;
6
7 for ch in $string.chars() {
8 if later_loop && place % 3 == 0 {
9 $output.push(',');
10 }
11
12 $output.push(ch);
13 later_loop = true;
14 place -= 1;
15 };
16
17 $output
18 }};
19}
20
21#[macro_export]
22macro_rules! separated_uint {
23 ($string:expr) => {{
24 let mut output = String::new();
25 separated_uint_with_output!($string, output)
26 }}
27}
28
29#[macro_export]
30macro_rules! separated_int {
31 ($string:expr) => {{
32 let mut output = String::new();
33 let magnitude = if $string.starts_with('-') {
34 output.push('-');
35 (&$string)[1..].to_owned()
36 } else {
37 $string
38 };
39
40 separated_uint_with_output!(magnitude, output)
41 }};
42}
43
44#[macro_export]
45macro_rules! separated_float {
46 ($string:expr) => {{
47 let idx = match $string.find('.') {
48 Some(i) => i,
49 None => $string.len()
50 };
51
52 let int_part = (&$string[..idx]).to_owned();
53 let fract_part = &$string[idx..];
54 let output = separated_int!(int_part);
55 output + fract_part
56 }};
57}