Skip to main content

ql_label/
model.rs

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, // TESTED
15    QL800,   // TESTED
16    QL810W,
17    QL820NWB, //TESTED
18    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    // pub fn supported_medias(&self) -> Vec<Media> {
82    //     match self {
83    //         Self::QL800 => vec![Media::Continuous29],
84    //         Self::QL810W => vec![Media::Continuous29],
85    //         Self::QL820NWB => vec![Media::Continuous29],
86    //     }
87    // }
88}