119 lines
3.7 KiB
Rust
119 lines
3.7 KiB
Rust
|
|
//! 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");
|
||
|
|
}
|