Skip to main content

wavecraft_dev_server/audio/
status.rs

1//! Audio runtime status helpers.
2//!
3//! This module provides constructors for `AudioRuntimeStatus` snapshots used by
4//! browser dev mode startup and diagnostics.
5
6use std::time::{SystemTime, UNIX_EPOCH};
7use wavecraft_protocol::{
8    AudioDiagnostic, AudioDiagnosticCode, AudioRuntimePhase, AudioRuntimeStatus,
9};
10
11/// Build a status snapshot without diagnostics.
12pub fn status(
13    phase: AudioRuntimePhase,
14    sample_rate: Option<f32>,
15    buffer_size: Option<u32>,
16) -> AudioRuntimeStatus {
17    AudioRuntimeStatus {
18        phase,
19        diagnostic: None,
20        sample_rate,
21        buffer_size,
22        updated_at_ms: now_millis(),
23    }
24}
25
26/// Build a status snapshot with structured diagnostics.
27pub fn status_with_diagnostic(
28    phase: AudioRuntimePhase,
29    code: AudioDiagnosticCode,
30    message: impl Into<String>,
31    hint: Option<&str>,
32    sample_rate: Option<f32>,
33    buffer_size: Option<u32>,
34) -> AudioRuntimeStatus {
35    AudioRuntimeStatus {
36        phase,
37        diagnostic: Some(AudioDiagnostic {
38            code,
39            message: message.into(),
40            hint: hint.map(ToOwned::to_owned),
41        }),
42        sample_rate,
43        buffer_size,
44        updated_at_ms: now_millis(),
45    }
46}
47
48fn now_millis() -> u64 {
49    SystemTime::now()
50        .duration_since(UNIX_EPOCH)
51        .map_or(0, |duration| duration.as_millis() as u64)
52}