1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//! Enya Plugin System
//!
//! This crate provides a neovim-style plugin system for extending editor functionality.
//! It is designed to be decoupled from any specific editor implementation through
//! the `PluginHost` trait.
//!
//! # Overview
//!
//! The plugin system supports three types of plugins:
//!
//! - **Config plugins** (`.toml`) - Simple plugins defined in TOML
//! - **Lua plugins** (`.lua`) - Dynamic plugins using Lua scripting
//! - **Native plugins** - Rust plugins implementing the `Plugin` trait
//!
//! # Architecture
//!
//! ```text
//! ┌─────────────────────────────────────────────────────────┐
//! │ Host Application │
//! │ (implements PluginHost trait) │
//! └─────────────────────────────────────────────────────────┘
//! │
//! ▼
//! ┌─────────────────────────────────────────────────────────┐
//! │ PluginContext │
//! │ (provides host services to plugins) │
//! └─────────────────────────────────────────────────────────┘
//! │
//! ▼
//! ┌─────────────────────────────────────────────────────────┐
//! │ PluginRegistry │
//! │ (manages plugin lifecycle) │
//! └─────────────────────────────────────────────────────────┘
//! │
//! ┌────────────────┼────────────────┐
//! ▼ ▼ ▼
//! ┌──────────┐ ┌──────────┐ ┌──────────┐
//! │ Config │ │ Lua │ │ Native │
//! │ Plugin │ │ Plugin │ │ Plugin │
//! └──────────┘ └──────────┘ └──────────┘
//! ```
//!
//! # Example: Implementing PluginHost
//!
//! ```ignore
//! use enya_plugin::{
//! PluginHost, PluginContext, PluginRegistry, NotificationLevel, LogLevel, Theme, BoxFuture,
//! };
//! use std::sync::Arc;
//!
//! struct MyEditor {
//! // ... editor state
//! }
//!
//! impl PluginHost for MyEditor {
//! fn notify(&self, level: NotificationLevel, message: &str) {
//! // Show notification to user
//! }
//!
//! fn request_repaint(&self) {
//! // Request UI refresh
//! }
//!
//! fn log(&self, level: LogLevel, message: &str) {
//! // Log message
//! }
//!
//! fn version(&self) -> &'static str {
//! "1.0.0"
//! }
//!
//! fn is_wasm(&self) -> bool {
//! false
//! }
//!
//! fn theme(&self) -> Theme {
//! Theme::Dark
//! }
//!
//! fn spawn(&self, future: BoxFuture<()>) {
//! // Spawn async task
//! }
//! }
//!
//! fn setup_plugins(editor: Arc<MyEditor>) {
//! let ctx = PluginContext::new(editor);
//! let mut registry = PluginRegistry::new();
//! registry.init(ctx);
//!
//! // Register and activate plugins...
//! }
//! ```
// Loader, Lua, and headless support only available on native platforms
// Re-export core types
pub use ;
// Re-export theme types
pub use ;
// Re-export plugin traits and types
pub use ;
// Re-export hooks
pub use ;
// Re-export registry
pub use ;
// Re-export headless host (native only)
pub use HeadlessPluginHost;
// Re-export loader (native only)
pub use ;
// Re-export Lua plugin support (native only)
pub use ;