Skip to main content

rustbac_client/
error.rs

1use rustbac_core::types::{ErrorClass, ErrorCode};
2use rustbac_datalink::DataLinkError;
3use thiserror::Error;
4
5/// Errors returned by [`BacnetClient`](crate::BacnetClient) operations.
6#[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}