use super::data_matrix_size::DataMatrixSize;
use crate::models::print_sections::DataMatrixModel;
#[derive(Debug, Clone)]
pub struct DataMatrix {
data: String,
size: DataMatrixSize,
}
impl DataMatrix {
pub fn new(data: String) -> Self {
Self {
data,
size: DataMatrixSize::Size6,
}
}
pub fn set_size(mut self, size: DataMatrixSize) -> Self {
self.size = size;
self
}
pub fn get_command(&self) -> Vec<u8> {
let mut output = Vec::new();
let data_bytes = self.data.as_bytes();
let data_length = (data_bytes.len() + 3) as u16;
let p_l = (data_length & 0xFF) as u8;
let p_h = ((data_length >> 8) & 0xFF) as u8;
output.extend_from_slice(&[
0x1D, 0x28, 0x6B, 0x03, 0x00, 0x32, 0x43, self.size.value(), ]);
output.extend_from_slice(&[
0x1D, 0x28, 0x6B, p_l, p_h, 0x32, 0x50, 0x30, ]);
output.extend_from_slice(data_bytes);
output.extend_from_slice(&[
0x1D, 0x28, 0x6B, 0x03, 0x00, 0x32, 0x51, 0x30, ]);
output
}
}
pub fn process_section(data_matrix: &DataMatrixModel) -> Result<Vec<u8>, String> {
let size = match data_matrix.size {
1 => DataMatrixSize::Size1,
2 => DataMatrixSize::Size2,
3 => DataMatrixSize::Size3,
4 => DataMatrixSize::Size4,
5 => DataMatrixSize::Size5,
6 => DataMatrixSize::Size6,
7 => DataMatrixSize::Size7,
8 => DataMatrixSize::Size8,
9 => DataMatrixSize::Size9,
10 => DataMatrixSize::Size10,
11 => DataMatrixSize::Size11,
12 => DataMatrixSize::Size12,
13 => DataMatrixSize::Size13,
14 => DataMatrixSize::Size14,
15 => DataMatrixSize::Size15,
16 => DataMatrixSize::Size16,
_ => DataMatrixSize::Size6,
};
let esc_pos_dm = DataMatrix::new(data_matrix.data.clone()).set_size(size);
let mut data = esc_pos_dm.get_command();
data.extend_from_slice(b"\n");
Ok(data)
}
impl DataMatrix {
}