voicemeeter\interface/
general_information.rs1use crate::types::VoicemeeterApplication;
8
9use super::VoicemeeterRemote;
10
11impl VoicemeeterRemote {
12 pub fn get_voicemeeter_type(
14 &self,
15 ) -> Result<VoicemeeterApplication, GetVoicemeeterInformationError> {
16 let mut t = 0i32;
17 let res = unsafe { self.raw.VBVMR_GetVoicemeeterType(&mut t) };
18 match res {
19 0 => Ok(VoicemeeterApplication::from(t)),
20 -1 => Err(GetVoicemeeterInformationError::CannotGetClient),
21 -2 => Err(GetVoicemeeterInformationError::NoServer),
22 s => Err(GetVoicemeeterInformationError::Other(s)),
23 }
24 }
25 pub fn get_voicemeeter_version(
27 &self,
28 ) -> Result<VoicemeeterVersion, GetVoicemeeterInformationError> {
29 let mut t = 0i32;
30 let res = unsafe { self.raw.VBVMR_GetVoicemeeterVersion(&mut t) };
31 match res {
32 0 => {
33 let a: [u8; 4] = t.to_be_bytes();
34 Ok(VoicemeeterVersion(a[0], a[1], a[2], a[3]))
35 }
36 -1 => Err(GetVoicemeeterInformationError::CannotGetClient),
37 -2 => Err(GetVoicemeeterInformationError::NoServer),
38 s => Err(GetVoicemeeterInformationError::Other(s)),
39 }
40 }
41}
42
43#[derive(Debug, Clone)]
45pub struct VoicemeeterVersion(pub u8, pub u8, pub u8, pub u8);
46
47impl std::fmt::Display for VoicemeeterVersion {
48 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
49 write!(f, "{}.{}.{}.{}", self.0, self.1, self.2, self.3)
50 }
51}
52
53#[derive(Debug, thiserror::Error, Clone)]
55#[non_exhaustive]
56pub enum GetVoicemeeterInformationError {
57 #[error("cannot get client (unexpected)")]
59 CannotGetClient,
60 #[error("no server")]
62 NoServer,
63 #[error("unexpected error occurred: error code {0}")]
65 Other(i32),
66 #[error("got an unexpected response")]
68 InvalidResponse(String),
69}