some ideas including stub

This commit is contained in:
2026-01-24 22:08:09 -07:00
committed by Liam Warfield
parent 09985e6031
commit 35b2a06e64
7 changed files with 160 additions and 43 deletions
+36 -14
View File
@@ -31,8 +31,7 @@ pub trait AudioSystemInterface: Sized {
each: impl FnMut(Vec<u8>, bool) + Send + 'static,
) -> Result<(), Error>;
/// Begin playback of an audio stream, returning an object that can be passed
/// with opus frames.
/// Begin playback of an audio stream, returning an object that can be passed opus frames.
fn create_player(&mut self) -> Result<Self::AudioPlayer, Error>;
}
@@ -89,18 +88,17 @@ pub trait PlatformInterface {
// Platform Modules
// ============================================================================
#[cfg(feature = "web")]
pub mod web;
#[cfg(any(feature = "desktop", feature = "mobile"))]
pub mod connect;
#[cfg(any(feature = "desktop", feature = "mobile"))]
pub mod native_audio;
mod connect;
#[cfg(feature = "desktop")]
pub mod desktop;
mod desktop;
#[cfg(feature = "mobile")]
pub mod mobile;
mod mobile;
#[cfg(any(feature = "desktop", feature = "mobile"))]
mod native_audio;
mod stub;
#[cfg(feature = "web")]
mod web;
// ============================================================================
// Platform Type Alias
@@ -115,20 +113,44 @@ pub type Platform = desktop::DesktopPlatform;
#[cfg(all(feature = "mobile", not(feature = "web"), not(feature = "desktop")))]
pub type Platform = mobile::MobilePlatform;
#[cfg(all(
not(feature = "mobile"),
not(feature = "web"),
not(feature = "desktop")
))]
pub type Platform = stub::StubPlatform;
pub type AudioSystem = <Platform as PlatformInterface>::AudioSystem;
pub type AudioPlayer = <AudioSystem as AudioSystemInterface>::AudioPlayer;
// ========================
// Platform Async Runtime
// ========================
// Note: these can not be part of the Platform because they differ in Send requiremets
#[cfg(all(any(feature = "desktop", feature = "mobile"), not(feature = "web")))]
pub use native_audio::{spawn, SpawnHandle};
pub use connect::{spawn, SpawnHandle};
#[cfg(all(
not(feature = "desktop"),
not(feature = "mobile"),
not(feature = "web")
))]
pub use stub::{spawn, SpawnHandle};
#[cfg(feature = "web")]
pub use web::{spawn, SpawnHandle};
/// Compile-time assertion that CurrentPlatform implements Platform.
// =======================
// Compile-time Assertions
// =======================
const _: () = {
fn assert_platform<T: PlatformInterface>() {}
let _ = assert_platform::<Platform>;
// Check each implementation, and prevent warnings that the implementations are unused.
#[cfg(feature = "web")]
let _ = assert_platform::<web::WebPlatform>;
#[cfg(feature = "desktop")]
let _ = assert_platform::<desktop::DesktopPlatform>;
#[cfg(feature = "mobile")]
let _ = assert_platform::<mobile::MobilePlatform>;
let _ = assert_platform::<stub::StubPlatform>;
};