cloudpub_client/plugins/
registry.rs1use crate::plugins::minecraft::MinecraftPlugin;
2use crate::plugins::onec::OneCPlugin;
3use crate::plugins::webdav::WebdavPlugin;
4use crate::plugins::Plugin;
5use cloudpub_common::protocol::Protocol;
6use std::collections::HashMap;
7use std::sync::Arc;
8
9pub struct PluginRegistry {
10 plugins: HashMap<Protocol, Arc<dyn Plugin>>,
11}
12
13impl Default for PluginRegistry {
14 fn default() -> Self {
15 Self::new()
16 }
17}
18
19impl PluginRegistry {
20 pub fn new() -> Self {
21 let mut registry = Self {
22 plugins: HashMap::new(),
23 };
24
25 registry.register(Protocol::Webdav, Arc::new(WebdavPlugin));
27 registry.register(Protocol::OneC, Arc::new(OneCPlugin));
28 registry.register(Protocol::Minecraft, Arc::new(MinecraftPlugin));
29
30 registry
31 }
32
33 pub fn register(&mut self, protocol: Protocol, plugin: Arc<dyn Plugin>) {
34 self.plugins.insert(protocol, plugin);
35 }
36
37 pub fn get(&self, protocol: Protocol) -> Option<Arc<dyn Plugin>> {
38 self.plugins.get(&protocol).cloned()
39 }
40}