use core::num::TryFromIntError;
use std::io;
use std::io::ErrorKind;
#[derive(Clone, Copy, Debug, Eq, PartialEq, thiserror::Error)]
pub enum ValueError {
#[error("Invalid frame ID for legacy frame format: {0}")]
InvalidFrameId(#[from] TryFromIntError),
#[error("Invalid route radius: {0}")]
InvalidRouteRadius(u16),
#[error("Invalid Ember duty cycle state: {0:#04X}")]
EmberDutyCycleState(u8),
#[error("Invalid Ember network status: {0:#04X}")]
EmberNetworkStatus(u8),
#[error("InvalidEmber node type: {0:#04X}")]
EmberNodeType(u8),
#[error("Invalid decision ID: {0:#04X}")]
DecisionId(u8),
#[error("Invalid entropy source: {0:#04X}")]
EntropySource(u8),
#[error("Missing payload")]
MissingPayload,
}
impl From<ValueError> for io::Error {
fn from(error: ValueError) -> Self {
let kind = match error {
ValueError::InvalidRouteRadius(_) => ErrorKind::InvalidInput,
ValueError::InvalidFrameId(_)
| ValueError::EmberDutyCycleState(_)
| ValueError::EmberNetworkStatus(_)
| ValueError::EmberNodeType(_)
| ValueError::DecisionId(_)
| ValueError::EntropySource(_)
| ValueError::MissingPayload => ErrorKind::InvalidData,
};
Self::new(kind, error)
}
}