use rust_rule_engine::engine::knowledge_base::KnowledgeBase;
use rust_rule_engine::engine::plugin::{PluginManager, RulePlugin};
use rust_rule_engine::RustRuleEngine;
use std::sync::Arc;
mod plugins;
use plugins::aiml_plugin::AIMLPlugin;
use plugins::database_plugin::DatabasePlugin;
use plugins::http_client_plugin::HttpClientPlugin;
use plugins::notification_plugin::NotificationPlugin;
use plugins::string_utils_plugin::StringUtilsPlugin;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🚀 Advanced Plugins Demo - Rust Rule Engine v0.9.0");
println!("{}", "=".repeat(60));
let knowledge_base = KnowledgeBase::new("AdvancedPluginsDemo");
let mut engine = RustRuleEngine::new(knowledge_base);
let config = rust_rule_engine::engine::plugin::PluginConfig {
max_plugins: 50,
enable_hot_reload: true,
plugin_timeout_ms: 5000,
safety_checks: false, };
let mut plugin_manager = PluginManager::new(config);
println!("\n📦 Loading Advanced Plugins...");
let http_plugin = Arc::new(HttpClientPlugin::new());
let database_plugin = Arc::new(DatabasePlugin::new());
let aiml_plugin = Arc::new(AIMLPlugin::new());
let notification_plugin = Arc::new(NotificationPlugin::new());
let string_plugin = Arc::new(StringUtilsPlugin::new());
register_plugin(&mut engine, &mut plugin_manager, http_plugin.clone())?;
register_plugin(&mut engine, &mut plugin_manager, database_plugin.clone())?;
register_plugin(&mut engine, &mut plugin_manager, aiml_plugin.clone())?;
register_plugin(
&mut engine,
&mut plugin_manager,
notification_plugin.clone(),
)?;
register_plugin(&mut engine, &mut plugin_manager, string_plugin.clone())?;
println!("✅ All plugins loaded successfully!\n");
println!("📋 Loaded Plugins:");
for (i, plugin_info) in plugin_manager.list_plugins().iter().enumerate() {
println!("{}. {} v{}", i + 1, plugin_info.name, plugin_info.version);
println!(" Description: {}", plugin_info.description);
println!(
" State: {:?} | Health: {:?}",
plugin_info.state, plugin_info.health
);
}
println!("\n📋 Plugin Capabilities:");
display_plugin_capabilities(http_plugin.as_ref());
display_plugin_capabilities(database_plugin.as_ref());
display_plugin_capabilities(aiml_plugin.as_ref());
display_plugin_capabilities(notification_plugin.as_ref());
display_plugin_capabilities(string_plugin.as_ref());
println!("\n🎯 Real-World Use Case Examples:");
println!("{}", "=".repeat(60));
demo_ecommerce_scenario();
demo_content_moderation_scenario();
demo_system_monitoring_scenario();
demo_customer_support_scenario();
println!("\n🎉 Advanced plugin demonstration completed!");
println!("💡 These plugins can be easily integrated into your rule definitions");
println!(" to create powerful automation workflows.");
let stats = plugin_manager.get_stats();
println!("\n📊 Plugin Statistics:");
println!(" Total Plugins: {}", stats.total_plugins);
println!(" Loaded Plugins: {}", stats.loaded_plugins);
println!(" Failed Plugins: {}", stats.failed_plugins);
println!(" Warnings: {}", stats.warnings);
Ok(())
}
fn register_plugin(
engine: &mut RustRuleEngine,
plugin_manager: &mut PluginManager,
plugin: Arc<dyn RulePlugin>,
) -> Result<(), Box<dyn std::error::Error>> {
plugin.register_actions(engine)?;
plugin.register_functions(engine)?;
plugin_manager.load_plugin(plugin)?;
Ok(())
}
fn display_plugin_capabilities(plugin: &dyn RulePlugin) {
let metadata = plugin.get_metadata();
println!("\n🔌 {} v{}", metadata.name, metadata.version);
println!(" 📝 {}", metadata.description);
println!(" 👤 Author: {}", metadata.author);
if !metadata.actions.is_empty() {
println!(" ⚡ Actions ({}):", metadata.actions.len());
for (i, action) in metadata.actions.iter().enumerate() {
println!(" {}. {}", i + 1, action);
}
}
if !metadata.functions.is_empty() {
println!(" 🔧 Functions ({}):", metadata.functions.len());
for (i, function) in metadata.functions.iter().enumerate() {
println!(" {}. {}", i + 1, function);
}
}
if !metadata.dependencies.is_empty() {
println!(" 📦 Dependencies: {}", metadata.dependencies.join(", "));
}
}
fn demo_ecommerce_scenario() {
println!("\n🛒 Scenario 1: E-commerce Order Processing");
println!("{}", "-".repeat(50));
println!("When a high-value order is placed:");
println!(" 1. 📧 validateEmail() - Verify customer email format");
println!(" 2. 🤖 PredictValue(fraud_detection) - Run ML fraud detection");
println!(" 3. 💾 ExecuteSQL() - Check product inventory in database");
println!(" 4. 🌐 HttpPost() - Process payment via payment gateway");
println!(" 5. 📧 SendEmail() - Send order confirmation to customer");
println!(" 6. 💾 InsertRecord() - Create order record in database");
println!(" 7. 🪝 SendWebhook() - Notify fulfillment system");
println!(" Result: ✅ Fully automated order processing with fraud protection");
}
fn demo_content_moderation_scenario() {
println!("\n🛡️ Scenario 2: Content Moderation & AI Analysis");
println!("{}", "-".repeat(50));
println!("When user-generated content is submitted:");
println!(" 1. 😊 SentimentAnalysis() - Analyze emotional tone");
println!(" 2. 🏷️ ClassifyText() - Categorize content type");
println!(" 3. 🔍 extractKeywords() - Extract important terms");
println!(" 4. 📊 calculateSimilarity() - Compare with known spam");
println!(" 5. 💾 InsertRecord() - Store analysis results");
println!(" 6. 🚨 CreateAlert() - Generate moderation alerts");
println!(" 7. 💬 SendSlackMessage() - Notify moderation team");
println!(" Result: ✅ AI-powered content moderation with real-time alerts");
}
fn demo_system_monitoring_scenario() {
println!("\n📊 Scenario 3: System Monitoring & Alerting");
println!("{}", "-".repeat(50));
println!("When system metrics exceed thresholds:");
println!(" 1. 🌐 HttpGet() - Fetch system health status");
println!(" 2. 💾 InsertRecord() - Store metrics in database");
println!(" 3. 🚨 DetectAnomalies() - ML-based anomaly detection");
println!(" 4. 📊 aggregateData() - Compare with historical averages");
println!(" 5. 🔴 RedisSet() - Cache current metrics for fast access");
println!(" 6. 🚨 CreateAlert() - Generate high-priority system alert");
println!(" 7. 📱 SendSMS() - Immediate SMS to on-call engineer");
println!(" 8. 📧 SendEmail() - Detailed report to DevOps team");
println!(" Result: ✅ Proactive system monitoring with multi-channel alerts");
}
fn demo_customer_support_scenario() {
println!("\n🎧 Scenario 4: Customer Support Automation");
println!("{}", "-".repeat(50));
println!("When a support ticket is received:");
println!(" 1. 🏷️ ClassifyText() - Categorize the support request");
println!(" 2. 🔍 extractKeywords() - Identify key issues");
println!(" 3. 💾 ExecuteSQL() - Look up customer information");
println!(" 4. 🤖 ChatCompletion() - Generate AI-powered response");
println!(" 5. 🍃 MongoFind() - Find similar resolved tickets");
println!(" 6. 💾 InsertRecord() - Create support ticket record");
println!(" 7. 📧 SendEmail() - Auto-response to customer");
println!(" 8. 💬 SendSlackMessage() - Notify support team");
println!(" 9. ⏰ ScheduleNotification() - Schedule follow-up");
println!(" 10. 🎯 RecommendItems() - Suggest helpful articles");
println!(" Result: ✅ Intelligent support automation with context awareness");
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_plugin_registration() {
let knowledge_base = KnowledgeBase::new("TestPlugins");
let mut engine = RustRuleEngine::new(knowledge_base);
let mut plugin_manager = PluginManager::with_default_config();
let http_plugin = Arc::new(HttpClientPlugin::new());
assert!(register_plugin(&mut engine, &mut plugin_manager, http_plugin).is_ok());
assert!(engine.has_action_handler("HttpGet"));
assert!(engine.has_action_handler("SendWebhook"));
assert!(engine.has_function("apiCall"));
assert!(engine.has_function("parseJson"));
let plugins = plugin_manager.list_plugins();
assert_eq!(plugins.len(), 1);
assert_eq!(plugins[0].name, "http-client");
}
#[test]
fn test_all_plugins_load() {
let knowledge_base = KnowledgeBase::new("TestAllPlugins");
let mut engine = RustRuleEngine::new(knowledge_base);
let mut plugin_manager = PluginManager::with_default_config();
let plugins: Vec<Arc<dyn RulePlugin>> = vec![
Arc::new(HttpClientPlugin::new()),
Arc::new(DatabasePlugin::new()),
Arc::new(AIMLPlugin::new()),
Arc::new(NotificationPlugin::new()),
Arc::new(StringUtilsPlugin::new()),
];
for plugin in plugins {
assert!(register_plugin(&mut engine, &mut plugin_manager, plugin).is_ok());
}
let loaded_plugins = plugin_manager.list_plugins();
assert_eq!(loaded_plugins.len(), 5);
assert!(engine.has_action_handler("HttpGet")); assert!(engine.has_action_handler("ExecuteSQL")); assert!(engine.has_action_handler("PredictValue")); assert!(engine.has_action_handler("SendEmail")); assert!(engine.has_action_handler("ToUpperCase"));
assert!(engine.has_function("apiCall")); assert!(engine.has_function("sqlQuery")); assert!(engine.has_function("calculateSimilarity")); assert!(engine.has_function("formatMessage")); assert!(engine.has_function("concatenate")); }
}