use crabstep::error::TypedStreamError;
use crate::error::handwriting::HandwritingError;
use crate::error::streamtyped::StreamTypedError;
use std::fmt::{Display, Formatter, Result};
#[derive(Debug)]
pub enum PlistParseError {
MissingKey(String),
NoValueAtIndex(usize),
InvalidType(String, String),
InvalidTypeIndex(usize, String),
InvalidDictionarySize(usize, usize),
NoPayload,
WrongMessageType,
InvalidEditedMessage(String),
StreamTypedError(StreamTypedError),
TypedStreamError(TypedStreamError),
HandwritingError(HandwritingError),
DigitalTouchError,
PollError,
}
impl Display for PlistParseError {
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {
match self {
PlistParseError::MissingKey(key) => write!(fmt, "Expected key {key}, found nothing!"),
PlistParseError::NoValueAtIndex(idx) => {
write!(fmt, "Payload referenced index {idx}, but there is no data!")
}
PlistParseError::InvalidType(key, value) => {
write!(fmt, "Invalid data found at {key}, expected {value}")
}
PlistParseError::InvalidTypeIndex(idx, value) => {
write!(
fmt,
"Invalid data found at object index {idx}, expected {value}"
)
}
PlistParseError::InvalidDictionarySize(a, b) => write!(
fmt,
"Invalid dictionary size, found {a} keys and {b} values"
),
PlistParseError::NoPayload => write!(fmt, "Unable to acquire payload data!"),
PlistParseError::WrongMessageType => write!(fmt, "Message is not an app message!"),
PlistParseError::InvalidEditedMessage(message) => {
write!(fmt, "Unable to parse message from binary data: {message}")
}
PlistParseError::StreamTypedError(why) => write!(fmt, "{why}"),
PlistParseError::HandwritingError(why) => write!(fmt, "{why}"),
PlistParseError::DigitalTouchError => {
write!(fmt, "Unable to parse Digital Touch Message!")
}
PlistParseError::TypedStreamError(typed_stream_error) => {
write!(fmt, "TypedStream error: {typed_stream_error}")
}
PlistParseError::PollError => write!(fmt, "Unable to parse Poll Message!"),
}
}
}
impl std::error::Error for PlistParseError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
PlistParseError::StreamTypedError(e) => Some(e),
PlistParseError::TypedStreamError(e) => Some(e),
PlistParseError::HandwritingError(e) => Some(e),
_ => None,
}
}
}
impl From<TypedStreamError> for PlistParseError {
fn from(error: TypedStreamError) -> Self {
PlistParseError::TypedStreamError(error)
}
}
impl From<StreamTypedError> for PlistParseError {
fn from(error: StreamTypedError) -> Self {
PlistParseError::StreamTypedError(error)
}
}