turbomcp_client/plugins/mod.rs
1//! Plugin system for TurboMCP client
2//!
3//! Provides an extensible plugin architecture with lifecycle hooks and middleware patterns
4//! for extending client functionality. Plugins can intercept requests and responses,
5//! handle custom methods, and add features like metrics, retries, and caching.
6//!
7//! ## Architecture
8//!
9//! The plugin system follows a middleware pattern where plugins are executed in order:
10//!
11//! ```text
12//! Request → Plugin 1 → Plugin 2 → Plugin N → Server
13//! ↓ ↓ ↓
14//! Response ← Plugin 1 ← Plugin 2 ← Plugin N ← Server
15//! ```
16//!
17//! ## Core Components
18//!
19//! - **ClientPlugin**: Core trait defining plugin lifecycle and hooks
20//! - **PluginRegistry**: Manages plugin registration, ordering, and execution
21//! - **RequestContext/ResponseContext**: Context objects passed to plugins
22//! - **Example Plugins**: MetricsPlugin, RetryPlugin, CachePlugin
23//!
24//! ## Usage
25//!
26//! ```rust,no_run
27//! use turbomcp_client::plugins::{PluginRegistry, MetricsPlugin, PluginConfig};
28//! use std::sync::Arc;
29//!
30//! async fn example() -> Result<(), Box<dyn std::error::Error>> {
31//! let mut registry = PluginRegistry::new();
32//!
33//! // Register built-in plugins
34//! let metrics = Arc::new(MetricsPlugin::new(PluginConfig::Metrics));
35//! registry.register_plugin(metrics).await?;
36//! Ok(())
37//! }
38//! ```
39
40pub mod core;
41pub mod examples;
42pub mod macros;
43pub mod middleware;
44pub mod registry;
45
46// Re-export core types for public API
47pub use core::{
48 ClientPlugin, PluginConfig, PluginContext, PluginError, PluginResult, RequestContext,
49 ResponseContext,
50};
51
52pub use registry::PluginRegistry;
53
54pub use examples::{
55 CacheConfig, CachePlugin, MetricsData, MetricsPlugin, RetryConfig, RetryPlugin,
56};
57
58pub use middleware::{MiddlewareChain, MiddlewareResult, RequestMiddleware, ResponseMiddleware};