cfdp-simplified 0.1.0

A simplied CFDP protocol
Documentation
use std::num::TryFromIntError;

use thiserror::Error;
use tokio::sync::mpsc::error::SendError;

use crate::filestore::FileStoreError;
use crate::pdu::EntityID;
use crate::pdu::{header::TransmissionMode, ops::TransactionSeqNum, PDU};

use super::TransactionID;

#[derive(Error, Debug)]
pub enum TransactionError {
    #[error("FileStore error during Transaction: {0}")]
    FileStore(#[from] Box<FileStoreError>),

    #[error("Error Communicating with transport: {0}")]
    Transport(#[from] Box<SendError<(EntityID, PDU)>>),

    #[error("No open file in transaction: {0:?}")]
    NoFile(TransactionID),

    #[error("Error converting from integer: {0}")]
    IntConversion(#[from] TryFromIntError),

    #[error("Transaction (ID: {0:?}, Mode: {1:?}) received unexpected PDU {2:}.")]
    UnexpectedPDU(TransactionSeqNum, TransmissionMode, String),

    #[error("Metadata missing for transaction: {0:?}.")]
    MissingMetadata(TransactionID),

    #[error("No Checksum received. Cannot verify file integrity.")]
    NoChecksum,
}
impl From<FileStoreError> for TransactionError {
    fn from(error: FileStoreError) -> Self {
        Self::FileStore(Box::new(error))
    }
}
impl From<SendError<(EntityID, PDU)>> for TransactionError {
    fn from(error: SendError<(EntityID, PDU)>) -> Self {
        Self::Transport(Box::new(error))
    }
}