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}