libobs_wrapper\data\properties\types/
button.rs

1use getters0::Getters;
2
3use crate::{
4    data::properties::{get_enum, get_opt_str, macros::unsafe_is_of_type_result, ObsButtonType},
5    run_with_obs,
6};
7
8use super::PropertyCreationInfo;
9
10#[derive(Debug, Getters, Clone)]
11#[skip_new]
12pub struct ObsButtonProperty {
13    name: String,
14    description: Option<String>,
15    button_type: ObsButtonType,
16    url: Option<String>,
17}
18
19impl TryFrom<PropertyCreationInfo> for ObsButtonProperty {
20    type Error = crate::utils::ObsError;
21
22    fn try_from(
23        PropertyCreationInfo {
24            name,
25            description,
26            pointer,
27            runtime,
28        }: PropertyCreationInfo,
29    ) -> Result<Self, Self::Error> {
30        run_with_obs!(runtime, (pointer), move || {
31            unsafe_is_of_type_result!(Button, pointer)?;
32
33            let url = unsafe {
34                // Safety: The pointer must be valid because of the unsafe new method of PropertyCreationInfo
35                get_opt_str!(pointer, button_url)
36            };
37            let button_type = get_enum!(pointer, button_type, ObsButtonType)?;
38
39            Ok(Self {
40                name,
41                description,
42                button_type,
43                url,
44            })
45        })?
46    }
47}