use crate::*;
use bytemuck::Zeroable;
#[deprecated = "Deprecated in favor of xinput::get_audio_device_ids. Unavailable for Windows Store apps, may fail on Windows 8."]
pub fn get_dsound_audio_device_guids(user_index: impl TryInto<u32>) -> Result<DSoundAudioDeviceGuids, Error> {
fn_context!(xinput::get_dsound_audio_device_guids => XInputGetDSoundAudioDeviceGuids);
#[allow(non_snake_case)] let XInputGetDSoundAudioDeviceGuids = imports::XInputGetDSoundAudioDeviceGuids.load(core::sync::atomic::Ordering::Relaxed);
let user_index = user_index.try_into().map_err(|_| fn_param_error!(user_index, error::BAD_ARGUMENTS))?;
let mut guids = DSoundAudioDeviceGuids::zeroed();
let code = unsafe { XInputGetDSoundAudioDeviceGuids(user_index, guids.dsound_render_guid.as_mut(), guids.dsound_capture_guid.as_mut()) };
check_success!(code)?;
Ok(guids)
}
#[test] #[allow(deprecated)] fn test_valid_args() {
for user_index in 0 .. 4 {
if let Err(err) = get_dsound_audio_device_guids(user_index) {
assert!(matches!(err.kind(), error::DEVICE_NOT_CONNECTED | error::INVALID_FUNCTION | error::CO_E_NOTINITIALIZED), "unexpected error type: {err:?}");
}
}
}
#[test] #[allow(deprecated)] fn test_bad_user_index() {
for user_index in xuser::invalids().chain(Some(xuser::INDEX_ANY)) {
let err = get_dsound_audio_device_guids(user_index).expect_err("get_dsound_audio_device_guids should return an error for invalid users");
assert!(matches!(err.kind(), error::BAD_ARGUMENTS | error::INVALID_FUNCTION | error::CO_E_NOTINITIALIZED), "unexpected error type: {err:?}");
}
}