cfdp_simplified/transaction/
error.rs

1use std::num::TryFromIntError;
2
3use thiserror::Error;
4use tokio::sync::mpsc::error::SendError;
5
6use crate::filestore::FileStoreError;
7use crate::pdu::EntityID;
8use crate::pdu::{header::TransmissionMode, ops::TransactionSeqNum, PDU};
9
10use super::TransactionID;
11
12#[derive(Error, Debug)]
13pub enum TransactionError {
14    #[error("FileStore error during Transaction: {0}")]
15    FileStore(#[from] Box<FileStoreError>),
16
17    #[error("Error Communicating with transport: {0}")]
18    Transport(#[from] Box<SendError<(EntityID, PDU)>>),
19
20    #[error("No open file in transaction: {0:?}")]
21    NoFile(TransactionID),
22
23    #[error("Error converting from integer: {0}")]
24    IntConversion(#[from] TryFromIntError),
25
26    #[error("Transaction (ID: {0:?}, Mode: {1:?}) received unexpected PDU {2:}.")]
27    UnexpectedPDU(TransactionSeqNum, TransmissionMode, String),
28
29    #[error("Metadata missing for transaction: {0:?}.")]
30    MissingMetadata(TransactionID),
31
32    #[error("No Checksum received. Cannot verify file integrity.")]
33    NoChecksum,
34}
35impl From<FileStoreError> for TransactionError {
36    fn from(error: FileStoreError) -> Self {
37        Self::FileStore(Box::new(error))
38    }
39}
40impl From<SendError<(EntityID, PDU)>> for TransactionError {
41    fn from(error: SendError<(EntityID, PDU)>) -> Self {
42        Self::Transport(Box::new(error))
43    }
44}