//! Startup Simple - Ejemplo de uso del wizard para una startup simple //! //! Este ejemplo muestra cómo una startup con requirements simples //! se beneficia más del wizard simple (Rust puro) use std::collections::HashMap; /// Configuración típica de una startup simple #[derive(Debug)] pub struct StartupConfig { pub app_name: String, pub environment: String, pub features: Vec, pub database_url: String, pub port: u16, } /// Ejemplo de configuración con wizard simple pub fn configure_with_simple_wizard() -> StartupConfig { // ✅ VENTAJAS del wizard simple para startup: // 1. Rápido de configurar (< 2 minutos) // 2. Sin dependencias extra // 3. Binario pequeño para despliegue // 4. Configuración predecible println!("=== Configuración Simple para Startup ==="); // Requirements típicos de startup: let typical_features = vec![ "auth".to_string(), // Autenticación básica "content-db".to_string(), // Base de datos simple "email".to_string(), // Notificaciones básicas ]; // Configuración directa, sin complicaciones StartupConfig { app_name: "MyStartup".to_string(), environment: "dev".to_string(), features: typical_features, database_url: "sqlite:startup.db".to_string(), port: 3030, } } /// Lo que NO necesita una startup simple pub fn what_startup_doesnt_need() { println!("❌ Una startup simple NO necesita:"); println!("- Configuraciones dinámicas complejas"); println!("- Scripts personalizables"); println!("- Múltiples flujos de configuración"); println!("- Integración con 20+ servicios externos"); println!("- Lógica de configuración que cambia diariamente"); } /// Métricas de rendimiento para startup pub fn performance_metrics() { println!("📊 Métricas con wizard simple:"); println!("- Tiempo de configuración: ~90 segundos"); println!("- Tamaño del binario: +200KB"); println!("- Tiempo de startup: <100ms"); println!("- Memoria adicional: <1MB"); } /// Flujo típico de configuración para startup pub fn typical_startup_flow() { println!("🚀 Flujo típico de configuración:"); println!("1. Seleccionar features básicas (auth, db, email)"); println!("2. Configurar base de datos SQLite"); println!("3. Configurar email con servicio gratuito"); println!("4. Usar defaults para todo lo demás"); println!("5. Desplegar rápidamente"); } #[cfg(test)] mod tests { use super::*; #[test] fn test_startup_config() { let config = configure_with_simple_wizard(); // Validar que tiene lo esencial assert!(config.features.contains(&"auth".to_string())); assert!(config.features.contains(&"content-db".to_string())); assert!(config.features.contains(&"email".to_string())); // Validar que no tiene features complejas assert!(!config.features.contains(&"rbac".to_string())); assert!(!config.features.contains(&"metrics".to_string())); assert!(!config.features.contains(&"tls".to_string())); } #[test] fn test_simple_is_fast() { let start = std::time::Instant::now(); let _config = configure_with_simple_wizard(); let duration = start.elapsed(); // Debe ser muy rápido assert!(duration.as_millis() < 100); } } // Ejemplo de uso fn main() { println!("🎯 Ejemplo: Startup Simple"); println!("=========================="); let config = configure_with_simple_wizard(); println!("✅ Configuración generada: {:?}", config); what_startup_doesnt_need(); performance_metrics(); typical_startup_flow(); println!("\n🎉 Resultado: Wizard simple es PERFECTO para este caso"); }