wavecraft_dev_server/audio/
status.rs1use std::time::{SystemTime, UNIX_EPOCH};
7use wavecraft_protocol::{
8 AudioDiagnostic, AudioDiagnosticCode, AudioRuntimePhase, AudioRuntimeStatus,
9};
10
11pub 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
20pub 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}