88 lines
2.4 KiB
Rust
88 lines
2.4 KiB
Rust
|
|
//! Example Analytics Theme Plugin
|
||
|
|
//!
|
||
|
|
//! This plugin demonstrates a complete, minimal plugin implementation for
|
||
|
|
//! Rustelo. It provides a custom theme optimized for displaying analytics
|
||
|
|
//! dashboards.
|
||
|
|
//!
|
||
|
|
//! # Features
|
||
|
|
//!
|
||
|
|
//! - Custom color scheme with analytics-friendly palette
|
||
|
|
//! - Responsive typography for data visualization
|
||
|
|
//! - Support for multiple languages (English, Spanish)
|
||
|
|
//! - Complete documentation and tests
|
||
|
|
//!
|
||
|
|
//! # Usage
|
||
|
|
//!
|
||
|
|
//! To use this plugin in your Rustelo project:
|
||
|
|
//!
|
||
|
|
//! 1. Add to your `Cargo.toml`: ```toml [dependencies] plugin-example-theme = {
|
||
|
|
//! path = "./crates/plugin-example-theme" } ```
|
||
|
|
//!
|
||
|
|
//! 2. Register in your resources initialization: ```rust,no_run use
|
||
|
|
//! plugin_example_theme::ExampleThemeContributor;
|
||
|
|
//!
|
||
|
|
//! rustelo_core_lib::register_contributor(&ExampleThemeContributor)?;
|
||
|
|
//! ```
|
||
|
|
//!
|
||
|
|
//! # Architecture
|
||
|
|
//!
|
||
|
|
//! The plugin follows the Rustelo Level 5 (Compile-Time) plugin architecture:
|
||
|
|
//! - Implements `ResourceContributor` trait
|
||
|
|
//! - Embeds configuration via `include_str!()`
|
||
|
|
//! - Registers at application startup
|
||
|
|
//! - No conditional compilation or framework coupling
|
||
|
|
|
||
|
|
mod resources;
|
||
|
|
|
||
|
|
pub use resources::ExampleThemeContributor;
|
||
|
|
|
||
|
|
/// Initialize the example theme plugin
|
||
|
|
///
|
||
|
|
/// This function registers the plugin's resource contributor with the
|
||
|
|
/// framework. Called automatically if the plugin is included in the
|
||
|
|
/// application.
|
||
|
|
///
|
||
|
|
/// # Returns
|
||
|
|
///
|
||
|
|
/// Returns `Ok(())` on successful registration, or an error if registration
|
||
|
|
/// fails.
|
||
|
|
///
|
||
|
|
/// # Example
|
||
|
|
///
|
||
|
|
/// ```no_run
|
||
|
|
/// use plugin_example_theme::initialize;
|
||
|
|
///
|
||
|
|
/// let result = initialize()?;
|
||
|
|
/// println!("Plugin initialized!");
|
||
|
|
/// # Ok::<(), Box<dyn std::error::Error>>(())
|
||
|
|
/// ```
|
||
|
|
pub fn initialize() -> Result<(), Box<dyn std::error::Error>> {
|
||
|
|
rustelo_core_lib::register_contributor(&ExampleThemeContributor)?;
|
||
|
|
|
||
|
|
#[cfg(not(target_arch = "wasm32"))]
|
||
|
|
{
|
||
|
|
eprintln!("✅ Example Theme Plugin initialized successfully");
|
||
|
|
eprintln!(" Theme: analytics-dashboard");
|
||
|
|
eprintln!(" Languages: en, es");
|
||
|
|
}
|
||
|
|
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
|
||
|
|
#[cfg(test)]
|
||
|
|
mod tests {
|
||
|
|
use super::*;
|
||
|
|
|
||
|
|
#[test]
|
||
|
|
fn test_plugin_can_be_initialized() {
|
||
|
|
let _contributor = ExampleThemeContributor;
|
||
|
|
// If we got here, the contributor exists and can be instantiated
|
||
|
|
}
|
||
|
|
|
||
|
|
#[test]
|
||
|
|
fn test_plugin_exports_public_api() {
|
||
|
|
// Verify the public API is accessible
|
||
|
|
let _path_to_initialize = initialize;
|
||
|
|
}
|
||
|
|
}
|