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}