Skip to main content

cfdp_simplified/pdu/
error.rs

1use std::string::FromUtf8Error;
2use thiserror::Error;
3
4pub type PDUResult<T> = Result<T, PDUError>;
5#[derive(Error, Debug)]
6/// Errors which can occur during a PDU encoding/decoding.
7pub enum PDUError {
8    #[error("Invalid Condition value: {0:}.")]
9    /// Unknown transaction condition value.
10    InvalidCondition(u8),
11
12    #[error("Invalid ChecksumType: {0:}.")]
13    /// Checksum type done not match a known value.
14    InvalidChecksumType(u8),
15
16    #[error("Invalid Direction value: {0:}.")]
17    /// Unknown transaction direction value.
18    InvalidDirection(u8),
19
20    #[error("Invalid Directive value: {0:}.")]
21    /// Unknown Transaction directive value.
22    InvalidDirective(u8),
23
24    #[error("Invalid Delivery Code: {0:}.")]
25    /// Unknown transaction delivery code value.
26    InvalidDeliveryCode(u8),
27
28    #[error("Invalid TransactionState: {0:}.")]
29    /// Unknown [TransactionState](crate::transaction::TransactionState) value.
30    InvalidState(u8),
31
32    #[error("Invalid File Status: {0:}.")]
33    /// Unknown [FileStatusCode](crate::pdu::FileStatusCode) value
34    InvalidFileStatus(u8),
35
36    #[error("Invalid Transmission Mode {0:}.")]
37    /// Unknown [TransmissionMode](crate::pdu::TransmissionMode) value.
38    InvalidTransmissionMode(u8),
39
40    #[error("Invalid Segment Control Mode {0:}.")]
41    /// Unknown [SegmentationControl](crate::pdu::SegmentationControl) value.
42    InvalidSegmentControl(u8),
43
44    #[error("Invalid Transaction Status {0:}.")]
45    /// Unknown [TransactionStatus](crate::pdu::TransactionStatus) value.
46    InvalidTransactionStatus(u8),
47
48    #[error("Invalid ACK SubDirective Code: {0:}.")]
49    /// Unknown Acknowledged sub-directive code value.
50    InvalidACKDirectiveSubType(u8),
51
52    #[error("Invalid CCSDS Version Code: {0:}.")]
53    /// Unknown CCSDS packet version.
54    InvalidVersion(u8),
55
56    #[error("Invalid Fault Handler Code: {0:}.")]
57    /// Unknown [HandlerCode](crate::pdu::HandlerCode) value.
58    InvalidFaultHandlerCode(u8),
59
60    #[error("Invalid PDU Type {0:}.")]
61    /// Received an unkown [PDUType](crate::pdu::PDUType) value.
62    InvalidPDUType(u8),
63
64    #[error("Invalid CRC Flag {0:}.")]
65    /// Unknown [CRCFlag](crate::pdu::CRCFlag) value
66    InvalidCRCFlag(u8),
67
68    #[error("Invalid File Size Flag {0:}.")]
69    /// Unknown flag value for [FileSizeFlag](crate::pdu::FileSizeFlag)
70    InvalidFileSizeFlag(u8),
71
72    #[error("Invalid Segment Metadata Flag {0:}.")]
73    /// Unknown value for [SegmentedData](crate::pdu::SegmentedData) flag.
74    InvalidSegmentMetadataFlag(u8),
75
76    #[error("CRC Failure on PDU. Expected 0x{0:X} Receieved 0x{1:X}")]
77    /// PDU crc16 failure
78    CRCFailure(u16, u16),
79
80    #[error("Error Reading PDU Buffer. {0:}")]
81    /// [std::io::Error] occurred when reading PDU from input byte stream.
82    ReadError(#[from] std::io::Error),
83
84    #[error("Bad length for Variable Identifier (not a power a of 2) {0:}.")]
85    /// Length of the ID variable identifier was not a power of 2.
86    UnknownIDLength(u8),
87
88    #[error("Unable to decode filename. {0}")]
89    /// Error occurred converting bytes to UTF-8 compliant filename.
90    InvalidFileName(#[from] FromUtf8Error),
91
92    // Error indicating an unsupport feature
93    #[error("Unsupported feature. {0}")]
94    Unsupported(String),
95}