plux_rs/
manager.rs

1use crate::{
2    context::LoadPluginContext, utils::ManagerResult, Api, Info, Plugin, RegisterPluginContext,
3};
4
5pub trait Manager<'a, O: Send + Sync, I: Info>: Send + Sync {
6    fn format(&self) -> &'static str;
7
8    fn register_manager(&mut self) -> ManagerResult<()> {
9        Ok(())
10    }
11
12    fn unregister_manager(&mut self) -> ManagerResult<()> {
13        Ok(())
14    }
15
16    fn register_plugin(&mut self, _context: RegisterPluginContext) -> ManagerResult<I>;
17
18    fn unregister_plugin(&mut self, _plugin: &Plugin<'a, O, I>) -> ManagerResult<()> {
19        Ok(())
20    }
21
22    fn load_plugin(
23        &mut self,
24        _context: LoadPluginContext<'a, '_, O, I>,
25        _api: Api<O, I>,
26    ) -> ManagerResult<()> {
27        Ok(())
28    }
29
30    fn unload_plugin(&mut self, _plugin: &Plugin<'a, O, I>) -> ManagerResult<()> {
31        Ok(())
32    }
33}
34
35impl<'a, O: Send + Sync, I: Info> PartialEq for dyn Manager<'a, O, I> {
36    fn eq(&self, other: &Self) -> bool {
37        self.format() == other.format()
38    }
39}
40
41impl<'a, O, OO, I, II> PartialEq<Box<dyn Manager<'a, O, I>>> for dyn Manager<'a, OO, II>
42where
43    O: Send + Sync,
44    OO: Send + Sync,
45    I: Info,
46    II: Info,
47{
48    fn eq(&self, other: &Box<dyn Manager<'a, O, I>>) -> bool {
49        self.format() == other.format()
50    }
51}
52
53impl<'a, O, OO, I, II> PartialEq<dyn Manager<'a, OO, II>> for Box<dyn Manager<'a, O, I>>
54where
55    O: Send + Sync,
56    OO: Send + Sync,
57    I: Info,
58    II: Info,
59{
60    fn eq(&self, other: &dyn Manager<'a, OO, II>) -> bool {
61        self.format() == other.format()
62    }
63}