1use rustbac_core::types::{ErrorClass, ErrorCode};
2use rustbac_datalink::DataLinkError;
3use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum ClientError {
8 #[error("datalink error: {0}")]
9 DataLink(#[from] DataLinkError),
10 #[error("encode error: {0}")]
11 Encode(#[from] rustbac_core::EncodeError),
12 #[error("decode error: {0}")]
13 Decode(#[from] rustbac_core::DecodeError),
14 #[error("request timed out")]
15 Timeout,
16 #[error("remote service error for service choice {service_choice}")]
17 RemoteServiceError {
18 service_choice: u8,
19 error_class_raw: Option<u32>,
20 error_code_raw: Option<u32>,
21 error_class: Option<ErrorClass>,
22 error_code: Option<ErrorCode>,
23 },
24 #[error("remote reject reason {reason}")]
25 RemoteReject { reason: u8 },
26 #[error("remote abort reason {reason} (server={server})")]
27 RemoteAbort { reason: u8, server: bool },
28 #[error("segment ack negative for sequence {sequence_number}")]
29 SegmentNegativeAck { sequence_number: u8 },
30 #[error("segmented request too large")]
31 SegmentedRequestTooLarge,
32 #[error("response payload exceeded {limit} bytes")]
33 ResponseTooLarge { limit: usize },
34 #[error("unsupported response")]
35 UnsupportedResponse,
36}