ewwii_plugin_api 1.1.0

A shared library for building plugins for ewwii
Documentation

ewwii_plugin_api

ewwii_plugin_api provides the core traits, types, and abstractions that bridge the ewwii host and its plugins.

This crate provides a safe and easy plugin development API through a simple and flexible interface for cross-boundary communication.

Usage

There are two ways to define a plugin: the Recommended Macro for standard plugins, and the Manual Implementation for full control.

1. Recommended: Using auto_plugin!

For most use cases, the macro handles the boilerplate of exporting symbols and implementing traits.

use ewwii_plugin_api::{auto_plugin, PluginInfo};

auto_plugin!(
    DummyStructure,
    PluginInfo::new("com.app.example", "1.0.0"),
    host,
    {
        host.log("Plugin says Hello!");
    }
);

2. Advanced: Manual Implementation

Use this approach if your plugin needs to maintain internal state, implement additional traits, or manage complex lifetimes.

use ewwii_plugin_api::{EwwiiAPI, Plugin, PluginInfo, export_plugin};

#[derive(Default)]
pub struct MyPlugin {
    count: std::sync::atomic::AtomicUsize,
}

impl Plugin for MyPlugin {
    fn metadata(&self) -> PluginInfo {
        PluginInfo::new("com.app.example", "1.0.0")
    }

    fn init(&self, host: &dyn EwwiiAPI) {
        host.log("Manual plugin initialized.");
    }
}

// This macro exports the C-compatible symbols required by the host loader
export_plugin!(MyPlugin);