use crate::application_protocol::{
application_pdu::ApduType, confirmed::ConfirmedServiceChoice,
services::read_range::ReadRangeValueType, unconfirmed::UnconfirmedServiceChoice,
};
use super::tag::{ApplicationTagNumber, Tag, TagNumber};
#[derive(Debug, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Error {
Length((&'static str, u32)),
InvalidValue(&'static str),
InvalidVariant((&'static str, u32)),
Unknown,
Unimplemented(Unimplemented),
SegmentationNotSupported,
UnexpectedInvokeId,
Io,
ApduTypeNotSupported(ApduType),
ExpectedTag(ExpectedTag),
ExpectedOpeningTag(TagNumber),
TagNotSupported((&'static str, TagNumber)),
TagValueInvalid((&'static str, Tag, u32)),
ReaderEof(usize),
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Unimplemented {
ConfirmedServiceChoice(ConfirmedServiceChoice),
UnconfirmedServiceChoice(UnconfirmedServiceChoice),
ReadRangeValueType(ReadRangeValueType),
ApplicationTagNumber(ApplicationTagNumber),
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ExpectedTag {
pub context: &'static str,
pub expected: TagNumber,
pub actual: TagNumber,
}