use crate::packet::header::PacketFrequency;
use serde_llsd_benthic::LLSDValue;
use std::{array::TryFromSliceError, str::Utf8Error, string::FromUtf8Error};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ParseError {
#[error("Unknown Packet ID: {id}, frequency: {frequency}")]
UnknownPacket {
id: u16,
frequency: PacketFrequency,
},
#[error("Parse Error: {0}")]
Message(String),
#[error("Missing field: {0}")]
MissingField(String),
#[error("Invalid field:: {0}")]
InvalidField(String),
#[error("Failed to generate mesh: {0}")]
MeshError(String),
#[error("Failed to deserialize Serde-LLSD map")]
LLSDError(),
#[error("Serde deserialze failed")]
SerdeError(#[from] serde_json::Error),
#[error("Failed to decode slice")]
SliceError(#[from] TryFromSliceError),
#[error("Parse Error: {0}")]
IOError(#[from] std::io::Error),
#[error("Utf8Error: {0}")]
Utf8Error(#[from] Utf8Error),
#[error("Anyhow Error: {0}")]
Anyhow(#[from] anyhow::Error),
#[error("QuickXML error: {0}")]
QuickXml(#[from] quick_xml::Error),
#[error("UUID parse error: {0}")]
UuidError(#[from] uuid::Error),
#[error("ParseInt error: {0}")]
ParseInt(#[from] std::num::ParseIntError),
#[error("Failed to parse bool: {0}")]
ParseBool(#[from] std::str::ParseBoolError),
#[error("XML unescape error: {0}")]
UnescapeError(#[from] quick_xml::escape::EscapeError),
#[error("Failed to parse float: {0}")]
ParseFloat(#[from] std::num::ParseFloatError),
#[error("UTF8 error: {0}")]
UTF8Error(#[from] FromUtf8Error),
}
impl From<LLSDValue> for ParseError {
fn from(_: LLSDValue) -> Self {
ParseError::LLSDError()
}
}