use serde::{Deserialize, Serialize};
use crate::event::Event;
use std::fmt::Debug;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub(crate) enum RevisitEnum {
ForwardRevisit(Revisit),
BackwardRevisit(Revisit),
}
impl RevisitEnum {
pub(crate) fn new_forward(pos: Event, placement: Event) -> Self {
RevisitEnum::ForwardRevisit(Revisit {
pos,
rev: placement,
})
}
pub(crate) fn new_backward(recv: Event, send: Event) -> Self {
RevisitEnum::BackwardRevisit(Revisit {
pos: recv,
rev: send,
})
}
fn get_revisit(&self) -> &Revisit {
match self {
RevisitEnum::ForwardRevisit(r) => r,
RevisitEnum::BackwardRevisit(r) => r,
}
}
pub(crate) fn pos(&self) -> Event {
self.get_revisit().pos
}
pub(crate) fn rev(&self) -> Event {
self.get_revisit().rev
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub(crate) struct Revisit {
pub(crate) pos: Event,
pub(crate) rev: Event,
}
impl Revisit {
pub(crate) fn new(pos: Event, rev: Event) -> Self {
Self { pos, rev }
}
}