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    build_status(phase, None, sample_rate, buffer_size)
18}
19
20/// Build a status snapshot with structured diagnostics.
21pub fn status_with_diagnostic(
22    phase: AudioRuntimePhase,
23    code: AudioDiagnosticCode,
24    message: impl Into<String>,
25    hint: Option<&str>,
26    sample_rate: Option<f32>,
27    buffer_size: Option<u32>,
28) -> AudioRuntimeStatus {
29    build_status(
30        phase,
31        Some(AudioDiagnostic {
32            code,
33            message: message.into(),
34            hint: hint.map(ToOwned::to_owned),
35        }),
36        sample_rate,
37        buffer_size,
38    )
39}
40
41fn build_status(
42    phase: AudioRuntimePhase,
43    diagnostic: Option<AudioDiagnostic>,
44    sample_rate: Option<f32>,
45    buffer_size: Option<u32>,
46) -> AudioRuntimeStatus {
47    AudioRuntimeStatus {
48        phase,
49        diagnostic,
50        sample_rate,
51        buffer_size,
52        updated_at_ms: now_millis(),
53    }
54}
55
56fn now_millis() -> u64 {
57    SystemTime::now()
58        .duration_since(UNIX_EPOCH)
59        .map_or(0, |duration| duration.as_millis() as u64)
60}