use std::error::Error;
use thiserror::Error;
use crate::DecodeError;
#[derive(Debug, Error)]
pub enum ModbusError {
#[error("Timeout")]
Timeout,
#[error(transparent)]
Protocol(Box<dyn Error + Send + Sync>),
#[error("I/O error")]
IO(#[from] std::io::Error),
#[error("Illegal function")]
IllegalFunction,
#[error("Illegal data address")]
IllegalDataAddress,
#[error("Illegal data value")]
IllegalDataValue,
#[error("Server device failure")]
ServerDeviceFailure,
#[error("Acknowledge")]
Acknowledge,
#[error("Server device busy")]
ServerDeviceBusy,
#[error("Memory parity error")]
MemoryParityError,
#[error("Gateway path unavailable")]
GatewayPathUnavailable,
#[error("Gateway target device")]
GatewayTargetDevice,
#[error("Custom: {0}")]
Custom(u8),
}
#[derive(Debug, Error)]
pub enum ReadModelError {
#[error("Modbus error: {0}")]
Modbus(#[from] ModbusError),
#[error("Decode error: {0}")]
DecodeError(#[from] DecodeError),
#[error("Missing mandatory value")]
MissingMandatoryValue,
}
#[derive(Debug, Error)]
pub enum ReadPointError {
#[error("Modbus error: {0}")]
Modbus(#[from] ModbusError),
#[error("Decode error: {0}")]
DecodeError(#[from] DecodeError),
#[error("Missing mandatory value")]
MissingMandatoryValue,
}
#[derive(Debug, Error)]
pub enum WritePointError {
#[error("Modbus error: {0}")]
Modbus(#[from] ModbusError),
#[error("Encoded value too large for point")]
ValueTooLarge,
}