omni_director/
lib.rs

1//! # OmniDirector - Unified Provider System
2//!
3//! A clean, unified architecture for managing cloud providers and their features.
4//! 
5//! ## Architecture Overview
6//! 
7//! The OmniDirector system is built around a unified provider architecture:
8//! 
9//! - **Providers**: External services (VirtualBox, AWS, Docker, etc.)
10//! - **Features**: Capabilities within providers (vm-management, storage, etc.)
11//! - **Operations**: Actions within features (start, stop, create, etc.)
12//! 
13//! ## Usage
14//! 
15//! ```rust
16//! use omni_director::{
17//!     providers::{ProviderRegistry, ProviderLoader, DefaultProviderContext},
18//!     routing::Router,
19//!     api_clean::{start_server, ServerConfig},
20//! };
21//! 
22//! // Create provider context
23//! let context = Arc::new(DefaultProviderContext::new());
24//! 
25//! // Create provider registry
26//! let registry = Arc::new(ProviderRegistry::new(context));
27//! 
28//! // Load providers
29//! let loader = ProviderLoader::new();
30//! let providers = loader.load_from_directory("./plugins", context).await?;
31//! 
32//! // Register providers
33//! for (provider, metadata) in providers {
34//!     registry.register_provider(provider, metadata).await?;
35//! }
36//! 
37//! // Create router
38//! let router = Arc::new(Router::new(registry));
39//! 
40//! // Start server
41//! let config = ServerConfig::default();
42//! start_server(registry, router, config).await?;
43//! ```
44//! 
45//! ## API Endpoints
46//! 
47//! - `GET /health` - Health check
48//! - `GET /providers` - List all providers
49//! - `GET /providers/{provider}` - Get provider details
50//! - `GET /providers/{provider}/features/{feature}` - Get feature details  
51//! - `POST /providers/{provider}/features/{feature}/operations/{operation}` - Execute operation
52
53// Core modules
54pub mod core;
55pub mod providers;
56pub mod routing;
57
58// API module (renamed from api_new)
59pub mod api {
60    //! Clean API layer with RESTful endpoints
61    pub use crate::api_clean::*;
62}
63
64// Internal API implementation
65mod api_clean {
66    pub mod handlers;
67    pub mod server;
68    pub mod middleware;
69    pub mod responses;
70    
71    pub use handlers::*;
72    pub use server::*;
73    pub use middleware::*;
74    pub use responses::*;
75}
76
77// Re-exports for convenience
78pub use core::*;
79pub use providers::*;
80pub use routing::*;
81
82// Common types and utilities
83pub mod prelude {
84    //! Common imports for OmniDirector usage
85    pub use crate::providers::{
86        Provider, ProviderContext, ProviderRegistry, ProviderLoader,
87        DefaultProviderContext, ProviderMetadata, ProviderError, ProviderResult,
88    };
89    pub use crate::routing::{Router, Route};
90    pub use crate::api::{ServerConfig, start_server};
91    pub use std::sync::Arc;
92    pub use std::collections::HashMap;
93    pub use serde_json::Value;
94}