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
use super::digits::*;
/// A policy for inserting separators into numbers.
///
/// The configurable aspects are:
///
/// - The separator character to insert.
///
/// - How to group the separators.
///
/// - What characters are considered digits (for skipping non-digits such as
/// a minus sign).
#[derive(Debug, Clone, Copy)]
pub struct SeparatorPolicy<'a> {
/// The separator to insert.
pub separator: &'a str,
/// The grouping. The numbers in this array give the size of the groups, from
/// right to left, with the last number in the array giving the size of all
/// subsequent groups.
///
/// So to group by threes, as is typical in many places,
/// this array should be `&[3]`. However, to get a grouping like `1,23,45,678`,
/// where the last group has size three and the others size two, you would use
/// `&[3, 2]`.
pub groups: &'a [u8],
/// The characters that are considered digits. If there are multiple groups of
/// digits separated by non-digits, we only add separators to the first group.
/// This means, for example, that the number `-12345.67` will only have separators
/// inserted into the `12345` portion.
pub digits: &'a [char],
}
/// Policy for placing a comma every three decimal digits.
pub const COMMA_SEPARATOR: SeparatorPolicy = SeparatorPolicy {
separator: ",",
groups: &[3],
digits: ASCII_DECIMAL,
};
/// Policy for placing a space every three decimal digits.
pub const SPACE_SEPARATOR: SeparatorPolicy = SeparatorPolicy {
separator: " ",
groups: &[3],
digits: ASCII_DECIMAL,
};
/// Policy for placing a period every three decimal digits.
pub const DOT_SEPARATOR: SeparatorPolicy = SeparatorPolicy {
separator: ".",
groups: &[3],
digits: ASCII_DECIMAL,
};
/// Policy for placing an underscore every three decimal digits.
pub const UNDERSCORE_SEPARATOR: SeparatorPolicy = SeparatorPolicy {
separator: "_",
groups: &[3],
digits: ASCII_DECIMAL,
};
/// Policy for placing a space every four hexadecimal digits.
pub const HEX_FOUR: SeparatorPolicy = SeparatorPolicy {
separator: " ",
groups: &[4],
digits: ASCII_HEXADECIMAL,
};