voicemeeter\interface\parameters/
set_parameters.rs1use std::ffi::CString;
9
10use crate::types::ParameterNameRef;
11
12use crate::VoicemeeterRemote;
13
14impl VoicemeeterRemote {
15 #[tracing::instrument(skip(self))]
17 pub fn set_parameter_float(
18 &self,
19 param: &ParameterNameRef,
20 value: f32,
21 ) -> Result<(), SetParameterError> {
22 let param = CString::new(param.as_ref()).unwrap();
23 tracing::debug!("setting float parameter");
24 let res = unsafe {
25 self.raw
26 .VBVMR_SetParameterFloat(param.as_ptr() as *mut _, value)
27 };
28 match res {
29 0 => Ok(()),
30 -1 => Err(SetParameterError::CannotGetClient),
31 -2 => Err(SetParameterError::NoServer),
32 -3 => Err(SetParameterError::UnknownParameter(
33 param.to_string_lossy().into_owned(),
34 )), s => Err(SetParameterError::Other(s)),
36 }
37 }
38
39 #[tracing::instrument(skip(self))]
41 pub fn set_parameter_string(
42 &self,
43 param: &ParameterNameRef,
44 value: &str,
45 ) -> Result<(), SetParameterError> {
46 let param = CString::new(param.as_ref()).unwrap();
47 let value = CString::new(value).unwrap();
48 tracing::debug!("setting string parameter");
49 let res = unsafe {
50 self.raw
51 .VBVMR_SetParameterStringA(param.as_ptr() as *mut _, value.as_ptr() as *mut _)
52 };
53 match res {
54 0 => Ok(()),
55 -1 => Err(SetParameterError::CannotGetClient),
56 -2 => Err(SetParameterError::NoServer),
57 -3 => Err(SetParameterError::UnknownParameter(
58 param.to_string_lossy().into_owned(),
59 )), s => Err(SetParameterError::Other(s)),
61 }
62 }
63
64 pub fn set_parameters(&self, script: &str) -> Result<(), SetParametersError> {
67 let script = CString::new(script).unwrap();
68 let res = unsafe { self.raw.VBVMR_SetParameters(script.as_ptr() as *mut _) };
69
70 match res {
71 l if l > 0 => Err(SetParametersError::ScriptError(l as usize)),
72 0 => Ok(()),
73 -1 => Err(SetParameterError::CannotGetClient.into()),
74 -2 => Err(SetParameterError::NoServer.into()),
75 s => Err(SetParameterError::Other(s).into()),
76 }
77 }
78}
79
80#[derive(Debug, thiserror::Error, Clone)]
82#[non_exhaustive]
83pub enum SetParametersError {
84 #[error("script error on line: {0}")]
86 ScriptError(usize),
87 #[error(transparent)]
89 SetParameterError(#[from] SetParameterError),
90}
91
92#[derive(Debug, thiserror::Error, Clone)]
94#[non_exhaustive]
95pub enum SetParameterError {
96 #[error("cannot get client (unexpected)")]
99 CannotGetClient,
100 #[error("no server")]
102 NoServer,
103 #[error("unknown parameter: {0}")]
105 UnknownParameter(String),
106 #[error("unexpected error occurred: error code {0}")]
108 Other(i32),
109}