libobs_wrapper\sources/
traits.rs1use crate::{
2 data::object::ObsObjectTrait,
3 macros::impl_eq_of_ptr,
4 sources::{ObsFilterRef, ObsSourceSignals, _ObsRemoveFilterOnDrop},
5 utils::ObsError,
6};
7use std::sync::Arc;
8
9#[derive(Debug, Clone)]
10pub struct ObsFilterGuardPair {
11 filter: ObsFilterRef,
12 pub(crate) _guard: Arc<_ObsRemoveFilterOnDrop>,
13}
14
15impl ObsFilterGuardPair {
16 pub(crate) fn new(filter: ObsFilterRef, guard: Arc<_ObsRemoveFilterOnDrop>) -> Self {
17 Self {
18 filter,
19 _guard: guard,
20 }
21 }
22
23 pub fn get_inner(&self) -> &ObsFilterRef {
24 &self.filter
25 }
26
27 pub fn get_inner_mut(&mut self) -> &mut ObsFilterRef {
28 &mut self.filter
29 }
30}
31
32#[allow(private_bounds)]
33pub trait ObsSourceTrait: ObsObjectTrait<*mut libobs::obs_source_t> {
34 fn signals(&self) -> &Arc<ObsSourceSignals>;
35
36 fn get_active_filters(&self) -> Result<Vec<ObsFilterGuardPair>, ObsError>;
37 fn apply_filter(&self, filter: &ObsFilterRef) -> Result<(), ObsError>;
38}
39
40impl_eq_of_ptr!(dyn ObsSourceTrait);