use std::fmt;
#[derive(Debug, Clone, PartialEq)]
pub enum PolylineError {
InvalidCharacter { character: char, position: usize },
TruncatedData,
CoordinateOverflow,
InvalidPrecision(u8),
EmptyInput,
InvalidCoordinate(String),
}
impl fmt::Display for PolylineError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
PolylineError::InvalidCharacter {
character,
position,
} => {
write!(
f,
"Invalid character '{}' at position {}",
character, position
)
}
PolylineError::TruncatedData => {
write!(f, "Polyline data is truncated or malformed")
}
PolylineError::CoordinateOverflow => {
write!(f, "Coordinate value overflow during encoding or decoding")
}
PolylineError::InvalidPrecision(precision) => {
write!(
f,
"Invalid precision {}, must be between 1 and 11",
precision
)
}
PolylineError::EmptyInput => {
write!(f, "Empty input provided")
}
PolylineError::InvalidCoordinate(message) => {
write!(f, "Invalid coordinate: {}", message)
}
}
}
}
impl std::error::Error for PolylineError {}
pub type PolylineResult<T> = Result<T, PolylineError>;