additional type parameter for success/failure
This commit is contained in:
parent
fc47159806
commit
2427e9ef6e
@ -310,25 +310,31 @@ pub(crate) fn increment_seq_counter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum VerifSuccess {}
|
||||||
|
pub enum VerifFailure {}
|
||||||
|
|
||||||
/// Abstraction for a sendable PUS TM. The user is expected to send the TM packet to a TM sink.
|
/// Abstraction for a sendable PUS TM. The user is expected to send the TM packet to a TM sink.
|
||||||
///
|
///
|
||||||
/// This struct generally mutably borrows the source data buffer.
|
/// This struct generally mutably borrows the source data buffer.
|
||||||
pub struct VerificationSendable<'src_data, State> {
|
pub struct VerificationSendable<'src_data, State, SuccessOrFailure> {
|
||||||
token: Option<VerificationToken<State>>,
|
token: Option<VerificationToken<State>>,
|
||||||
pus_tm: Option<PusTm<'src_data>>,
|
pus_tm: Option<PusTm<'src_data>>,
|
||||||
|
phantom: PhantomData<SuccessOrFailure>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'src_data, State> VerificationSendable<'src_data, State> {
|
impl<'src_data, State, SuccessOrFailure> VerificationSendable<'src_data, State, SuccessOrFailure> {
|
||||||
pub(crate) fn new(pus_tm: PusTm<'src_data>, token: VerificationToken<State>) -> Self {
|
pub(crate) fn new(pus_tm: PusTm<'src_data>, token: VerificationToken<State>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
token: Some(token),
|
token: Some(token),
|
||||||
pus_tm: Some(pus_tm),
|
pus_tm: Some(pus_tm),
|
||||||
|
phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub(crate) fn new_no_token(pus_tm: PusTm<'src_data>) -> Self {
|
pub(crate) fn new_no_token(pus_tm: PusTm<'src_data>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
token: None,
|
token: None,
|
||||||
pus_tm: Some(pus_tm),
|
pus_tm: Some(pus_tm),
|
||||||
|
phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,7 +353,9 @@ impl<'src_data, State> VerificationSendable<'src_data, State> {
|
|||||||
pub(crate) fn take_tm(&mut self) -> PusTm<'src_data> {
|
pub(crate) fn take_tm(&mut self) -> PusTm<'src_data> {
|
||||||
self.pus_tm.take().unwrap()
|
self.pus_tm.take().unwrap()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'src_data, State> VerificationSendable<'src_data, State, VerifFailure> {
|
||||||
pub fn send_success_verif_failure(
|
pub fn send_success_verif_failure(
|
||||||
self,
|
self,
|
||||||
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
||||||
@ -356,7 +364,13 @@ impl<'src_data, State> VerificationSendable<'src_data, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'src_data> VerificationSendable<'src_data, TcStateNone> {
|
impl<'src_data, State> VerificationSendable<'src_data, State, VerifFailure> {
|
||||||
|
pub fn send_failure(self) -> (PusTm<'src_data>, VerificationToken<State>) {
|
||||||
|
(self.pus_tm.unwrap(), self.token.unwrap())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'src_data> VerificationSendable<'src_data, TcStateNone, VerifSuccess> {
|
||||||
pub fn send_success_acceptance_success(
|
pub fn send_success_acceptance_success(
|
||||||
self,
|
self,
|
||||||
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
||||||
@ -367,13 +381,9 @@ impl<'src_data> VerificationSendable<'src_data, TcStateNone> {
|
|||||||
req_id: self.token.unwrap().req_id(),
|
req_id: self.token.unwrap().req_id(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_failure(self) -> (PusTm<'src_data>, VerificationToken<TcStateNone>) {
|
|
||||||
(self.pus_tm.unwrap(), self.token.unwrap())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'src_data> VerificationSendable<'src_data, TcStateAccepted> {
|
impl<'src_data> VerificationSendable<'src_data, TcStateAccepted, VerifSuccess> {
|
||||||
pub fn send_success_start_success(
|
pub fn send_success_start_success(
|
||||||
self,
|
self,
|
||||||
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
||||||
@ -384,22 +394,15 @@ impl<'src_data> VerificationSendable<'src_data, TcStateAccepted> {
|
|||||||
req_id: self.token.unwrap().req_id(),
|
req_id: self.token.unwrap().req_id(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_failure(self) -> (PusTm<'src_data>, VerificationToken<TcStateAccepted>) {
|
|
||||||
(self.pus_tm.unwrap(), self.token.unwrap())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'src_data> VerificationSendable<'src_data, TcStateStarted> {
|
impl<'src_data> VerificationSendable<'src_data, TcStateStarted, VerifSuccess> {
|
||||||
pub fn send_success_step_or_completion_success(
|
pub fn send_success_step_or_completion_success(
|
||||||
self,
|
self,
|
||||||
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
seq_counter: Option<&(impl SequenceCountProviderCore<u16> + ?Sized)>,
|
||||||
) {
|
) {
|
||||||
increment_seq_counter(seq_counter);
|
increment_seq_counter(seq_counter);
|
||||||
}
|
}
|
||||||
pub fn send_failure(self) -> (PusTm<'src_data>, Option<VerificationToken<TcStateStarted>>) {
|
|
||||||
(self.pus_tm.unwrap(), self.token)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Primary verification handler. It provides an API to send PUS 1 verification telemetry packets
|
/// Primary verification handler. It provides an API to send PUS 1 verification telemetry packets
|
||||||
@ -456,7 +459,10 @@ impl VerificationReporterCore {
|
|||||||
token: VerificationToken<State>,
|
token: VerificationToken<State>,
|
||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
time_stamp: &'src_data [u8],
|
time_stamp: &'src_data [u8],
|
||||||
) -> Result<VerificationSendable<'src_data, State>, VerificationErrorWithToken<State>> {
|
) -> Result<
|
||||||
|
VerificationSendable<'src_data, State, VerifSuccess>,
|
||||||
|
VerificationErrorWithToken<State>,
|
||||||
|
> {
|
||||||
Ok(VerificationSendable::new(
|
Ok(VerificationSendable::new(
|
||||||
self.create_pus_verif_success_tm(
|
self.create_pus_verif_success_tm(
|
||||||
src_data_buf,
|
src_data_buf,
|
||||||
@ -479,7 +485,10 @@ impl VerificationReporterCore {
|
|||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
step: Option<&(impl EcssEnumeration + ?Sized)>,
|
step: Option<&(impl EcssEnumeration + ?Sized)>,
|
||||||
params: &FailParams<'src_data, '_>,
|
params: &FailParams<'src_data, '_>,
|
||||||
) -> Result<VerificationSendable<'src_data, State>, VerificationErrorWithToken<State>> {
|
) -> Result<
|
||||||
|
VerificationSendable<'src_data, State, VerifFailure>,
|
||||||
|
VerificationErrorWithToken<State>,
|
||||||
|
> {
|
||||||
Ok(VerificationSendable::new(
|
Ok(VerificationSendable::new(
|
||||||
self.create_pus_verif_fail_tm(
|
self.create_pus_verif_fail_tm(
|
||||||
src_data_buf,
|
src_data_buf,
|
||||||
@ -501,8 +510,10 @@ impl VerificationReporterCore {
|
|||||||
token: VerificationToken<TcStateNone>,
|
token: VerificationToken<TcStateNone>,
|
||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
time_stamp: &'src_data [u8],
|
time_stamp: &'src_data [u8],
|
||||||
) -> Result<VerificationSendable<'src_data, TcStateNone>, VerificationErrorWithToken<TcStateNone>>
|
) -> Result<
|
||||||
{
|
VerificationSendable<'src_data, TcStateNone, VerifSuccess>,
|
||||||
|
VerificationErrorWithToken<TcStateNone>,
|
||||||
|
> {
|
||||||
self.sendable_success_no_step(
|
self.sendable_success_no_step(
|
||||||
src_data_buf,
|
src_data_buf,
|
||||||
Subservice::TmAcceptanceSuccess.into(),
|
Subservice::TmAcceptanceSuccess.into(),
|
||||||
@ -514,7 +525,7 @@ impl VerificationReporterCore {
|
|||||||
|
|
||||||
pub fn send_acceptance<'src_data, E>(
|
pub fn send_acceptance<'src_data, E>(
|
||||||
&self,
|
&self,
|
||||||
mut sendable: VerificationSendable<'src_data, TcStateNone>,
|
mut sendable: VerificationSendable<'src_data, TcStateNone, VerifSuccess>,
|
||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
sender: &mut (impl EcssTmSenderCore<Error = E> + ?Sized),
|
sender: &mut (impl EcssTmSenderCore<Error = E> + ?Sized),
|
||||||
) -> Result<VerificationToken<TcStateAccepted>, VerificationOrSendErrorWithToken<E, TcStateNone>>
|
) -> Result<VerificationToken<TcStateAccepted>, VerificationOrSendErrorWithToken<E, TcStateNone>>
|
||||||
@ -532,8 +543,10 @@ impl VerificationReporterCore {
|
|||||||
token: VerificationToken<TcStateNone>,
|
token: VerificationToken<TcStateNone>,
|
||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
params: FailParams<'src_data, '_>,
|
params: FailParams<'src_data, '_>,
|
||||||
) -> Result<VerificationSendable<'src_data, TcStateNone>, VerificationErrorWithToken<TcStateNone>>
|
) -> Result<
|
||||||
{
|
VerificationSendable<'src_data, TcStateNone, VerifFailure>,
|
||||||
|
VerificationErrorWithToken<TcStateNone>,
|
||||||
|
> {
|
||||||
self.sendable_failure_no_step(
|
self.sendable_failure_no_step(
|
||||||
src_data_buf,
|
src_data_buf,
|
||||||
Subservice::TmAcceptanceFailure.into(),
|
Subservice::TmAcceptanceFailure.into(),
|
||||||
@ -554,7 +567,7 @@ impl VerificationReporterCore {
|
|||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
time_stamp: &'src_data [u8],
|
time_stamp: &'src_data [u8],
|
||||||
) -> Result<
|
) -> Result<
|
||||||
VerificationSendable<'src_data, TcStateAccepted>,
|
VerificationSendable<'src_data, TcStateAccepted, VerifSuccess>,
|
||||||
VerificationErrorWithToken<TcStateAccepted>,
|
VerificationErrorWithToken<TcStateAccepted>,
|
||||||
> {
|
> {
|
||||||
self.sendable_success_no_step(
|
self.sendable_success_no_step(
|
||||||
@ -577,7 +590,7 @@ impl VerificationReporterCore {
|
|||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
params: FailParams<'src_data, '_>,
|
params: FailParams<'src_data, '_>,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
VerificationSendable<'src_data, TcStateAccepted>,
|
VerificationSendable<'src_data, TcStateAccepted, VerifFailure>,
|
||||||
VerificationErrorWithToken<TcStateAccepted>,
|
VerificationErrorWithToken<TcStateAccepted>,
|
||||||
> {
|
> {
|
||||||
self.sendable_failure_no_step(
|
self.sendable_failure_no_step(
|
||||||
@ -600,7 +613,7 @@ impl VerificationReporterCore {
|
|||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
time_stamp: &'src_data [u8],
|
time_stamp: &'src_data [u8],
|
||||||
step: impl EcssEnumeration,
|
step: impl EcssEnumeration,
|
||||||
) -> Result<VerificationSendable<'src_data, TcStateStarted>, EcssTmError> {
|
) -> Result<VerificationSendable<'src_data, TcStateStarted, VerifSuccess>, EcssTmError> {
|
||||||
Ok(VerificationSendable::new_no_token(
|
Ok(VerificationSendable::new_no_token(
|
||||||
self.create_pus_verif_success_tm(
|
self.create_pus_verif_success_tm(
|
||||||
src_data_buf,
|
src_data_buf,
|
||||||
@ -624,7 +637,7 @@ impl VerificationReporterCore {
|
|||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
params: FailParamsWithStep<'src_data, '_>,
|
params: FailParamsWithStep<'src_data, '_>,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
VerificationSendable<'src_data, TcStateStarted>,
|
VerificationSendable<'src_data, TcStateStarted, VerifFailure>,
|
||||||
VerificationErrorWithToken<TcStateStarted>,
|
VerificationErrorWithToken<TcStateStarted>,
|
||||||
> {
|
> {
|
||||||
Ok(VerificationSendable::new(
|
Ok(VerificationSendable::new(
|
||||||
@ -652,7 +665,7 @@ impl VerificationReporterCore {
|
|||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
time_stamp: &'src_data [u8],
|
time_stamp: &'src_data [u8],
|
||||||
) -> Result<
|
) -> Result<
|
||||||
VerificationSendable<'src_data, TcStateStarted>,
|
VerificationSendable<'src_data, TcStateStarted, VerifSuccess>,
|
||||||
VerificationErrorWithToken<TcStateStarted>,
|
VerificationErrorWithToken<TcStateStarted>,
|
||||||
> {
|
> {
|
||||||
self.sendable_success_no_step(
|
self.sendable_success_no_step(
|
||||||
@ -675,7 +688,7 @@ impl VerificationReporterCore {
|
|||||||
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
seq_counter: &(impl SequenceCountProviderCore<u16> + ?Sized),
|
||||||
params: FailParams<'src_data, '_>,
|
params: FailParams<'src_data, '_>,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
VerificationSendable<'src_data, TcStateStarted>,
|
VerificationSendable<'src_data, TcStateStarted, VerifFailure>,
|
||||||
VerificationErrorWithToken<TcStateStarted>,
|
VerificationErrorWithToken<TcStateStarted>,
|
||||||
> {
|
> {
|
||||||
self.sendable_failure_no_step(
|
self.sendable_failure_no_step(
|
||||||
@ -996,7 +1009,7 @@ mod alloc_mod {
|
|||||||
sender
|
sender
|
||||||
.send_tm(sendable.take_tm())
|
.send_tm(sendable.take_tm())
|
||||||
.map_err(|e| VerificationOrSendErrorWithToken(e, token))?;
|
.map_err(|e| VerificationOrSendErrorWithToken(e, token))?;
|
||||||
sendable.send_success_step_or_completion_success(Some(self.seq_counter.as_ref()));
|
sendable.send_success_verif_failure(Some(self.seq_counter.as_ref()));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1042,7 +1055,7 @@ mod alloc_mod {
|
|||||||
sender
|
sender
|
||||||
.send_tm(sendable.take_tm())
|
.send_tm(sendable.take_tm())
|
||||||
.map_err(|e| VerificationOrSendErrorWithToken(e, token))?;
|
.map_err(|e| VerificationOrSendErrorWithToken(e, token))?;
|
||||||
sendable.send_success_step_or_completion_success(Some(self.seq_counter.as_ref()));
|
sendable.send_success_verif_failure(Some(self.seq_counter.as_ref()));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user