cfdp_simplified/transaction/
error.rs1use 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}