3 releases
0.1.2 | May 9, 2024 |
---|---|
0.1.1 | May 9, 2024 |
0.1.0 | May 4, 2024 |
#9 in #reload
87 downloads per month
4MB
418 lines
Jude this is a small macros for the libloading that makes it easier to write plugins Jude depends libloading only
You can write the structure without implementation, and load the functionality from the plugin
Code example
// examples/jude_plugin.rs
#[repr(C)]
#[derive(Clone, Debug)]
pub struct JudePlugin {
pub word: String,
pub one: u8,
pub two: f32,
pub tree: bool,
}
#[no_mangle]
pub fn who_am_i(_self: &JudePlugin) {
println!("my name is Jude");
}
// examples/jude_plugin_app.rs
use std::{ffi::OsString, thread, time::Duration};
use jude::jude;
jude! (
#[repr(C)]
#[derive(Debug, Clone)]
pub struct JudePlugin {
pub word: String = String::from("example string"),
pub one: u8 = 1,
pub two: f32 = 2.0,
pub tree: bool = true,
pub fn who_am_i(&self),
}
);
fn main() -> Result<(), libloading::Error> {
let mut lib =
JudePlugin::_load_from(OsString::from("target/debug/examples/libjude_plugin.dylib"))?;
loop {
if let Ok(true) = lib._is_changed() {
if let Err(e) = lib._reload() {
println!("{:?}", e);
break;
}
}
lib.who_am_i();
thread::sleep(Duration::from_secs(1));
}
Ok(())
}
Usage
# Cargo.toml
[dependencies]
jude = "0.1.*"
Example build
1, cargo build --examples
2. cargo run --example jude_plugin_app
3. change who_am_i func examples/jude_plugin.rs
4. cargo build --exmaples