use flexaudio_core::Capabilities;
pub fn capabilities() -> Capabilities {
platform_capabilities()
}
#[cfg(target_os = "linux")]
fn platform_capabilities() -> Capabilities {
flexaudio_os_linux::capabilities()
}
#[cfg(target_os = "windows")]
fn platform_capabilities() -> Capabilities {
flexaudio_os_windows::capabilities()
}
#[cfg(target_os = "macos")]
fn platform_capabilities() -> Capabilities {
flexaudio_os_macos::capabilities()
}
#[cfg(not(any(target_os = "linux", target_os = "windows", target_os = "macos")))]
fn platform_capabilities() -> Capabilities {
use flexaudio_core::{
Availability, BackendKind, DeviceSelectionBehavior, DeviceWatcherCapabilities, PidScope,
ProcessCapabilities, SideEffectCapabilities, SideEffectCapability, SideEffectCondition,
SourceCapabilities, SourceCapability, SystemExclusionCapabilities, UnavailableReason,
WatcherMode,
};
let unsupported = || Availability::Unavailable {
reason: UnavailableReason::UnsupportedOs,
};
let source = || SourceCapability::new(BackendKind::Unsupported, unsupported());
let side_effect =
|condition| SideEffectCapability::new(unsupported(), false, vec![], condition);
Capabilities::new(
None,
SourceCapabilities::new(
SourceCapability::new(BackendKind::Cpal, Availability::Supported),
source(),
source(),
source(),
),
SystemExclusionCapabilities::new(
unsupported(),
BackendKind::Unsupported,
PidScope::NotApplicable,
None,
DeviceSelectionBehavior::NotApplicable,
),
ProcessCapabilities::new(PidScope::NotApplicable, PidScope::NotApplicable),
DeviceWatcherCapabilities::new(unsupported(), WatcherMode::Noop, vec![]),
SideEffectCapabilities::new(
side_effect(SideEffectCondition::SilentActiveSystemAudio),
side_effect(SideEffectCondition::ClassicLoopbackWithoutExclusions),
),
)
}