mod concatenated_short_message_16_bit;
pub use concatenated_short_message_16_bit::ConcatenatedShortMessage16Bit;
mod concatenated_short_message_8_bit;
pub use concatenated_short_message_8_bit::ConcatenatedShortMessage8Bit;
pub mod parts {
pub use super::concatenated_short_message_8_bit::ConcatenatedShortMessage8BitParts;
pub use super::concatenated_short_message_16_bit::ConcatenatedShortMessage16BitParts;
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum ConcatenatedShortMessage {
EightBit(ConcatenatedShortMessage8Bit),
SixteenBit(ConcatenatedShortMessage16Bit),
}
impl ConcatenatedShortMessage {
pub const fn udh_length(&self) -> usize {
match self {
Self::EightBit(_) => ConcatenatedShortMessage8Bit::UDH_LENGTH,
Self::SixteenBit(_) => ConcatenatedShortMessage16Bit::UDH_LENGTH,
}
}
pub const fn udh_bytes(&self) -> ConcatenatedShortMessageUdhBytes {
match self {
Self::EightBit(concatenation) => {
ConcatenatedShortMessageUdhBytes::EightBit(concatenation.udh_bytes())
}
Self::SixteenBit(concatenation) => {
ConcatenatedShortMessageUdhBytes::SixteenBit(concatenation.udh_bytes())
}
}
}
}
#[derive(Debug)]
pub enum ConcatenatedShortMessageUdhBytes {
EightBit([u8; 6]),
SixteenBit([u8; 7]),
}
impl ConcatenatedShortMessageUdhBytes {
pub const fn as_bytes(&self) -> &[u8] {
match self {
Self::EightBit(bytes) => bytes,
Self::SixteenBit(bytes) => bytes,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum ConcatenatedShortMessageType {
EightBit { reference: u8 },
SixteenBit { reference: u16 },
}
impl ConcatenatedShortMessageType {
pub const fn u8(reference: u8) -> Self {
Self::EightBit { reference }
}
pub const fn u16(reference: u16) -> Self {
Self::SixteenBit { reference }
}
pub const fn udh_length(self) -> usize {
match self {
Self::EightBit { .. } => ConcatenatedShortMessage8Bit::UDH_LENGTH,
Self::SixteenBit { .. } => ConcatenatedShortMessage16Bit::UDH_LENGTH,
}
}
pub const fn concatenated_short_message_unchecked(
self,
total_parts: u8,
part_number: u8,
) -> ConcatenatedShortMessage {
match self {
Self::EightBit { reference } => ConcatenatedShortMessage::EightBit(
ConcatenatedShortMessage8Bit::new_unchecked(reference, total_parts, part_number),
),
Self::SixteenBit { reference } => ConcatenatedShortMessage::SixteenBit(
ConcatenatedShortMessage16Bit::new_unchecked(reference, total_parts, part_number),
),
}
}
}