Attribute Macro memflow_derive::os
source · #[os]
Expand description
Creates a memflow os plugin. This function takes care of supplying all necessary underlying structures for exposing a memflow os plugin in the form of a dylib.
Macro Parameters:
name
- The name of the plugin
version
- The version of the plugin
description
- Short description of the plugin
help_fn
- Name of the function that provides a help text to the user
accept_input
- Wether or not this Os-Plugin is able to accept a connector as an input
return_wrapped
- Wether or not the return value is an already wrapped cglue object or if the macro needs to construct it
Examples:
Simple usage:
ⓘ
#[os(name = "dummy_os", version = "1.0.0", description = "Dummy Plugin for Testing purposes")]
pub fn create_os(
_args: &OsArgs,
) -> Result<DummyOs> {
let phys_mem = DummyMemory::new(size::mb(16));
Ok(DummyOs::new(phys_mem))
}
Custom help function:
ⓘ
#[os(name = "dummy_os", help_fn = "help")]
pub fn create_os(
_args: &OsArgs,
) -> Result<DummyOs> {
let phys_mem = DummyMemory::new(size::mb(16));
Ok(DummyOs::new(phys_mem))
}
pub fn help() -> String {
"Dummy Plugin for Testing purposes".to_string()
}
Wrapped return with manually created os instance:
ⓘ
#[os(name = "dummy_os", return_wrapped = true)]
pub fn create_os(
args: &OsArgs,
lib: LibArc,
) -> Result<OsInstanceArcBox<'static>> {
let phys_mem = DummyMemory::new(size::mb(16));
let os = DummyOs::new(phys_mem);
Ok(memflow::plugins::os::create_instance(os, lib, args))
}
Os with input parameter:
ⓘ
#[os(name = "dummy_os", accept_input = true)]
pub fn create_os(
args: &OsArgs,
_connector: Option<ConnectorInstanceArcBox<'static>>,
) -> Result<DummyOs> {
let phys_mem = DummyMemory::new(size::mb(16));
Ok(DummyOs::new(phys_mem))
}
Os with input parameter and manually created os instance:
ⓘ
#[os(name = "dummy_os", accept_input = true, return_wrapped = true)]
pub fn create_os(
args: &OsArgs,
_connector: Option<ConnectorInstanceArcBox<'static>>,
lib: LibArc,
) -> Result<OsInstanceArcBox<'static>> {
let phys_mem = DummyMemory::new(size::mb(16));
let os = DummyOs::new(phys_mem);
Ok(memflow::plugins::os::create_instance(os, lib, args))
}