use std::fmt;
#[derive(Debug, Clone)]
pub enum TiktokenError {
UnknownEncoding(String),
UnknownModel(String),
InvalidToken(u32),
EncodingError(String),
DecodingError(String),
RegexError(String),
DataError(String),
Other(String),
}
impl fmt::Display for TiktokenError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TiktokenError::UnknownEncoding(name) => {
write!(f, "Unknown encoding: {name}")
}
TiktokenError::UnknownModel(name) => {
write!(f, "Unknown model: {name}")
}
TiktokenError::InvalidToken(token) => {
write!(f, "Invalid token: {token}")
}
TiktokenError::EncodingError(msg) => {
write!(f, "Encoding error: {msg}")
}
TiktokenError::DecodingError(msg) => {
write!(f, "Decoding error: {msg}")
}
TiktokenError::RegexError(msg) => {
write!(f, "Regex error: {msg}")
}
TiktokenError::DataError(msg) => {
write!(f, "Data error: {msg}")
}
TiktokenError::Other(msg) => {
write!(f, "Error: {msg}")
}
}
}
}
impl std::error::Error for TiktokenError {}
impl From<regex::Error> for TiktokenError {
fn from(err: regex::Error) -> Self {
TiktokenError::RegexError(err.to_string())
}
}
impl From<std::string::FromUtf8Error> for TiktokenError {
fn from(err: std::string::FromUtf8Error) -> Self {
TiktokenError::DecodingError(err.to_string())
}
}
pub type Result<T> = std::result::Result<T, TiktokenError>;