Rustelo/examples/startup_simple.rs

119 lines
3.7 KiB
Rust
Raw Normal View History

//! 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<String>,
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");
}