1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use ffi::*;

#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum AudioService {
	Main,
	Effects,
	VisuallyImpaired,
	HearingImpaired,
	Dialogue,
	Commentary,
	Emergency,
	VoiceOver,
	Karaoke,
}

impl From<AVAudioServiceType> for AudioService {
	fn from(value: AVAudioServiceType) -> Self {
		match value {
			AV_AUDIO_SERVICE_TYPE_MAIN              => AudioService::Main,
			AV_AUDIO_SERVICE_TYPE_EFFECTS           => AudioService::Effects,
			AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED => AudioService::VisuallyImpaired,
			AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  => AudioService::HearingImpaired,
			AV_AUDIO_SERVICE_TYPE_DIALOGUE          => AudioService::Dialogue,
			AV_AUDIO_SERVICE_TYPE_COMMENTARY        => AudioService::Commentary,
			AV_AUDIO_SERVICE_TYPE_EMERGENCY         => AudioService::Emergency,
			AV_AUDIO_SERVICE_TYPE_VOICE_OVER        => AudioService::VoiceOver,
			AV_AUDIO_SERVICE_TYPE_KARAOKE           => AudioService::Karaoke,
			AV_AUDIO_SERVICE_TYPE_NB                => AudioService::Main
		}
	}
}

impl Into<AVAudioServiceType> for AudioService {
	fn into(self) -> AVAudioServiceType {
		match self {
			AudioService::Main             => AV_AUDIO_SERVICE_TYPE_MAIN,
			AudioService::Effects          => AV_AUDIO_SERVICE_TYPE_EFFECTS,
			AudioService::VisuallyImpaired => AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED,
			AudioService::HearingImpaired  => AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED,
			AudioService::Dialogue         => AV_AUDIO_SERVICE_TYPE_DIALOGUE,
			AudioService::Commentary       => AV_AUDIO_SERVICE_TYPE_COMMENTARY,
			AudioService::Emergency        => AV_AUDIO_SERVICE_TYPE_EMERGENCY,
			AudioService::VoiceOver        => AV_AUDIO_SERVICE_TYPE_VOICE_OVER,
			AudioService::Karaoke          => AV_AUDIO_SERVICE_TYPE_KARAOKE
		}
	}
}