use crate::*;
use crate::xinput::*;
use std::ffi::OsString;
use std::os::windows::ffi::*;
pub fn get_audio_device_ids(user_index: impl Into<User>) -> Result<AudioDeviceIds, MethodError> {
#[allow(non_snake_case)] let XInputGetAudioDeviceIds = Imports::get().XInputGetAudioDeviceIds.ok_or(MethodError("XInputGetAudioDeviceIds", THINERR::MISSING_DLL_EXPORT))?;
let mut render_id = [0u16; 4096];
let mut capture_id = [0u16; 4096];
let mut render_len = 4096;
let mut capture_len = 4096;
let code = unsafe { XInputGetAudioDeviceIds(user_index.into().into(), render_id.as_mut_ptr(), &mut render_len, capture_id.as_mut_ptr(), &mut capture_len) };
check_error_success("XInputGetAudioDeviceIds", code)?;
let render_device_id = OsString::from_wide(render_id .get(..render_len as usize).ok_or(MethodError("XInputGetAudioDeviceIds (render_device_id conversion)", THINERR::SLICE_TOO_LARGE))?.split(|c| *c==0).next().unwrap_or(&[]));
let capture_device_id = OsString::from_wide(capture_id.get(..capture_len as usize).ok_or(MethodError("XInputGetAudioDeviceIds (capture_device_id conversion)", THINERR::SLICE_TOO_LARGE))?.split(|c| *c==0).next().unwrap_or(&[]));
Ok(AudioDeviceIds {
render_device_id: if render_device_id .is_empty() { None } else { Some(render_device_id ) },
capture_device_id: if capture_device_id.is_empty() { None } else { Some(capture_device_id) },
})
}
#[test] fn test_returns() {
if get_audio_device_ids(User::Zero) == THINERR::MISSING_DLL_EXPORT { return }
if let Err(err) = get_audio_device_ids(User::Zero ) { assert_eq!(ERROR::DEVICE_NOT_CONNECTED, err.kind()); }
if let Err(err) = get_audio_device_ids(User::One ) { assert_eq!(ERROR::DEVICE_NOT_CONNECTED, err.kind()); }
if let Err(err) = get_audio_device_ids(User::Two ) { assert_eq!(ERROR::DEVICE_NOT_CONNECTED, err.kind()); }
if let Err(err) = get_audio_device_ids(User::Three) { assert_eq!(ERROR::DEVICE_NOT_CONNECTED, err.kind()); }
assert_eq!(ERROR::BAD_ARGUMENTS, get_audio_device_ids(User::from_unchecked(4)) );
assert_eq!(ERROR::BAD_ARGUMENTS, get_audio_device_ids(User::Any) );
}