moqtap_client/draft12/
track_status.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum TrackStatusState {
8 Idle,
10 Pending,
12 Done,
14}
15
16#[derive(Debug, thiserror::Error, PartialEq, Eq)]
18pub enum TrackStatusError {
19 #[error("invalid transition from {from:?} on event {event}")]
21 InvalidTransition {
22 from: TrackStatusState,
24 event: String,
26 },
27}
28
29pub struct TrackStatusStateMachine {
32 state: TrackStatusState,
33}
34
35impl Default for TrackStatusStateMachine {
36 fn default() -> Self {
37 Self::new()
38 }
39}
40
41impl TrackStatusStateMachine {
42 pub fn new() -> Self {
44 Self { state: TrackStatusState::Idle }
45 }
46
47 pub fn state(&self) -> TrackStatusState {
49 self.state
50 }
51
52 pub fn on_track_status_request_sent(&mut self) -> Result<(), TrackStatusError> {
54 if self.state == TrackStatusState::Idle {
55 self.state = TrackStatusState::Pending;
56 Ok(())
57 } else {
58 Err(TrackStatusError::InvalidTransition {
59 from: self.state,
60 event: "on_track_status_request_sent".to_string(),
61 })
62 }
63 }
64
65 pub fn on_track_status(&mut self) -> Result<(), TrackStatusError> {
67 if self.state == TrackStatusState::Pending {
68 self.state = TrackStatusState::Done;
69 Ok(())
70 } else {
71 Err(TrackStatusError::InvalidTransition {
72 from: self.state,
73 event: "on_track_status".to_string(),
74 })
75 }
76 }
77}