qr_code_styling/types/
mode.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum Mode {
7 Numeric,
9 Alphanumeric,
11 Byte,
13 Kanji,
15}
16
17impl Mode {
18 pub fn detect(data: &str) -> Mode {
20 if data.chars().all(|c| c.is_ascii_digit()) {
21 Mode::Numeric
22 } else if data.chars().all(|c| {
23 c.is_ascii_digit()
24 || c.is_ascii_uppercase()
25 || matches!(c, ' ' | '$' | '%' | '*' | '+' | '-' | '.' | '/' | ':')
26 }) {
27 Mode::Alphanumeric
28 } else {
29 Mode::Byte
30 }
31 }
32}