libobs_wrapper\sources/
traits.rs

1use 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);