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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use crate::{
data::ObsDataPointers,
run_with_obs,
utils::{ObsError, ObsString},
};
pub trait ObsDataSetters: ObsDataPointers {
/// Sets a string in `obs_data` and stores it so
/// it in `ObsData` does not get freed.
fn set_string<T: Into<ObsString> + Send + Sync, K: Into<ObsString> + Send + Sync>(
&mut self,
key: T,
value: K,
) -> Result<&mut Self, ObsError> {
let key = key.into();
let value = value.into();
let data_ptr = self.as_ptr();
run_with_obs!(self.runtime(), (data_ptr, key, value), move || {
unsafe {
// Safety: The pointer is valid because we are using a smart pointer
libobs::obs_data_set_string(data_ptr.get_ptr(), key.as_ptr().0, value.as_ptr().0)
}
})?;
Ok(self)
}
/// Sets an int in `obs_data` and stores the key
/// in `ObsData` so it does not get freed.
fn set_int<T: Into<ObsString> + Sync + Send>(
&mut self,
key: T,
value: i64,
) -> Result<&mut Self, ObsError> {
let key = key.into();
let data_ptr = self.as_ptr();
run_with_obs!(self.runtime(), (key, data_ptr), move || {
unsafe {
// Safety: The pointer is valid because we are using a smart pointer
libobs::obs_data_set_int(data_ptr.get_ptr(), key.as_ptr().0, value);
}
})?;
Ok(self)
}
/// Sets a bool in `obs_data` and stores the key
/// in `ObsData` so it does not get freed.
fn set_bool<T: Into<ObsString> + Sync + Send>(
&mut self,
key: T,
value: bool,
) -> Result<&mut Self, ObsError> {
let key = key.into();
let data_ptr = self.as_ptr();
run_with_obs!(self.runtime(), (key, data_ptr), move || {
unsafe {
// Safety: The pointer is valid because we are using a smart pointer
libobs::obs_data_set_bool(data_ptr.get_ptr(), key.as_ptr().0, value);
}
})?;
Ok(self)
}
/// Sets a double in `obs_data` and stores the key
/// in `ObsData` so it does not get freed.
fn set_double<T: Into<ObsString> + Sync + Send>(
&mut self,
key: T,
value: f64,
) -> Result<&mut Self, ObsError> {
let key = key.into();
let data_ptr = self.as_ptr();
run_with_obs!(self.runtime(), (key, data_ptr), move || {
unsafe {
// Safety: The pointer is valid because we are using a smart pointer
libobs::obs_data_set_double(data_ptr.get_ptr(), key.as_ptr().0, value);
}
})?;
Ok(self)
}
}