1use std::str::FromStr;
2
3#[derive(Debug, Clone, Copy)]
4pub enum Model {
5 QL500,
6 QL550,
7 QL560,
8 QL570,
9 QL580N,
10 QL600,
11 QL650TD,
12 QL700,
13 QL710W,
14 QL720NW, QL800, QL810W,
17 QL820NWB, QL1050,
19 QL1060N,
20 QL1100,
21 QL1110NWB,
22 QL1115NWB,
23}
24
25#[derive(Debug, PartialEq, Eq)]
26pub struct InvalidPrinterName;
27
28impl FromStr for Model {
29 type Err = InvalidPrinterName;
30
31 fn from_str(s: &str) -> Result<Self, Self::Err> {
32 match s {
33 "QL-720NW" => Ok(Self::QL720NW),
34 "QL-800" => Ok(Self::QL800),
35 "QL-820NW" => Ok(Self::QL820NWB),
36 "QL-820NWB" => Ok(Self::QL820NWB),
37 _ => Err(InvalidPrinterName),
38 }
39 }
40}
41impl Model {
42 pub fn from_code(code: u8) -> Self {
43 match code {
44 0x47 => Self::QL600,
45 0x37 => Self::QL720NW,
46 0x38 => Self::QL800,
47 0x39 => Self::QL810W,
48 0x41 => Self::QL820NWB,
49 0x43 => Self::QL1100,
50 0x44 => Self::QL1110NWB,
51 0x45 => Self::QL1115NWB,
52 _ => panic!("Unknown model code {}", code),
53 }
54 }
55
56 pub fn pid(&self) -> u16 {
57 match self {
58 Self::QL600 => 0x20C0,
59 Self::QL720NW => 0x2044,
60 Self::QL800 => 0x209b,
61 Self::QL810W => 0x209c,
62 Self::QL820NWB => 0x209d,
63 Self::QL1100 => 0x20A7,
64 Self::QL1110NWB => 0x20A8,
65 Self::QL1115NWB => 0x20AB,
66 _ => 0x0000,
67 }
68 }
69
70 pub fn pins(&self) -> u32 {
71 match self {
72 Self::QL1050 => crate::WIDE_PRINTER_WIDTH,
73 Self::QL1060N => crate::WIDE_PRINTER_WIDTH,
74 Self::QL1100 => crate::WIDE_PRINTER_WIDTH,
75 Self::QL1110NWB => crate::WIDE_PRINTER_WIDTH,
76 Self::QL1115NWB => crate::WIDE_PRINTER_WIDTH,
77 _ => crate::NORMAL_PRINTER_WIDTH,
78 }
79 }
80
81 }