#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Mode {
Numeric,
Alphanumeric,
Byte,
Kanji,
Eci(u32),
}
impl Mode {
pub fn is_data(&self) -> bool {
!matches!(self, Mode::Eci(_))
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Segment {
pub mode: Mode,
pub data: Vec<u8>,
}
impl Segment {
pub fn numeric(digits: impl Into<Vec<u8>>) -> Self {
Segment {
mode: Mode::Numeric,
data: digits.into(),
}
}
pub fn alphanumeric(data: impl Into<Vec<u8>>) -> Self {
Segment {
mode: Mode::Alphanumeric,
data: data.into(),
}
}
pub fn byte(data: impl Into<Vec<u8>>) -> Self {
Segment {
mode: Mode::Byte,
data: data.into(),
}
}
pub fn kanji(data: impl Into<Vec<u8>>) -> Self {
Segment {
mode: Mode::Kanji,
data: data.into(),
}
}
pub fn eci(assignment: u32) -> Self {
Segment {
mode: Mode::Eci(assignment),
data: Vec::new(),
}
}
}