First commit
This commit is contained in:
commit
39248b2ca3
8 changed files with 140 additions and 0 deletions
38
src/plugin_manager.rs
Normal file
38
src/plugin_manager.rs
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue