1
0
Fork 0

First commit

This commit is contained in:
Florian RICHER 2022-01-27 21:50:25 +01:00
commit 39248b2ca3
8 changed files with 140 additions and 0 deletions

38
src/plugin_manager.rs Normal file
View file

@ -0,0 +1,38 @@
use std::env::current_exe;
use std::path::PathBuf;
use glob::glob;
#[derive(Debug, Clone)]
pub struct Plugin {
pub version: String
}
pub struct PluginManager {
pub plugins: Vec<Plugin>,
}
impl PluginManager {
pub fn new() {
println!("Loading librairies...");
let mut plugins = Vec::new();
let current_path = current_exe().unwrap();
let parent_path = current_path.parent().unwrap();
let lib_folder = parent_path.join("*.so");
for lib_file in glob(lib_folder.to_str().unwrap()).unwrap() {
let plugin = Self::load_library(lib_file.unwrap());
println!("Loaded plugin {:?}", plugin);
plugins.push(plugin);
}
}
fn load_library(lib_file: PathBuf) -> Plugin {
println!("Loading library {:?}", lib_file);
unsafe {
let lib = libloading::Library::new(lib_file).unwrap();
let version_func : libloading::Symbol<extern fn() -> String> = lib.get(b"version").unwrap();
Plugin {
version: version_func()
}
}
}
}