separator/
macros.rs

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}