spacepackets/src/cfdp/pdu/finished.rs

60 lines
1.6 KiB
Rust
Raw Normal View History

2023-06-08 16:51:22 +02:00
use crate::cfdp::pdu::PduHeader;
2023-06-08 20:50:18 +02:00
use crate::cfdp::tlv::EntityIdTlv;
2023-06-08 16:51:22 +02:00
use crate::cfdp::ConditionCode;
use num_enum::{IntoPrimitive, TryFromPrimitive};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Debug, Copy, Clone, PartialEq, Eq, TryFromPrimitive, IntoPrimitive)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[repr(u8)]
pub enum DeliveryCode {
Complete = 0,
Incomplete = 1,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, TryFromPrimitive, IntoPrimitive)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[repr(u8)]
pub enum FileStatus {
DiscardDeliberately = 0b00,
DiscardedFsRejection = 0b01,
Retained = 0b10,
Unreported = 0b11,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
2023-06-08 20:55:46 +02:00
pub struct FinishedPdu<'fs_responses> {
2023-06-08 16:51:22 +02:00
pdu_header: PduHeader,
condition_code: ConditionCode,
delivery_code: DeliveryCode,
file_status: FileStatus,
2023-06-08 20:50:18 +02:00
fs_responses: Option<&'fs_responses [u8]>,
fault_location: Option<EntityIdTlv>,
2023-06-08 16:51:22 +02:00
}
2023-06-08 20:55:46 +02:00
impl FinishedPdu<'_> {
/// Default finished PDU: No error (no fault location field) and no filestore responses.
pub fn new_default(
pdu_header: PduHeader,
delivery_code: DeliveryCode,
file_status: FileStatus,
) -> Self {
Self {
pdu_header,
condition_code: ConditionCode::NoError,
delivery_code,
file_status,
fs_responses: None,
fault_location: None,
}
}
}
#[cfg(test)]
mod tests {
#[test]
fn test_basic() {}
}