//! Runtime Configuration Example //! //! Demonstrates how to use the RuntimeConfig layer with environment-aware defaults. use config::runtime::{Environment, RuntimeConfig}; fn main() -> Result<(), Box> { println!("=== Foxhunt Runtime Configuration Example ===\n"); // Example 1: Auto-detect environment from ENVIRONMENT variable println!("1. Auto-detecting environment:"); let config = RuntimeConfig::from_env()?; println!(" Environment: {:?}", config.environment); println!( " Database query timeout: {:?}", config.database.query_timeout ); println!(" Position cache TTL: {:?}", config.cache.position_ttl); println!( " gRPC request timeout: {:?}", config.timeouts.grpc_request_timeout ); println!(" ML max batch size: {}", config.limits.ml_max_batch_size); println!(); // Example 2: Development environment defaults println!("2. Development environment defaults:"); let dev_config = RuntimeConfig::with_defaults(Environment::Development); println!( " Database query timeout: {:?} (relaxed for debugging)", dev_config.database.query_timeout ); println!( " Position cache TTL: {:?} (longer for debugging)", dev_config.cache.position_ttl ); println!( " Safety check timeout: {:?} (relaxed)", dev_config.limits.safety_check_timeout ); println!(); // Example 3: Production environment defaults println!("3. Production environment defaults:"); let prod_config = RuntimeConfig::with_defaults(Environment::Production); println!( " Database query timeout: {:?} (tight for HFT)", prod_config.database.query_timeout ); println!( " Position cache TTL: {:?} (short for HFT)", prod_config.cache.position_ttl ); println!( " Safety check timeout: {:?} (aggressive)", prod_config.limits.safety_check_timeout ); println!(); // Example 4: Staging environment (middle ground) println!("4. Staging environment defaults:"); let staging_config = RuntimeConfig::with_defaults(Environment::Staging); println!( " Database query timeout: {:?}", staging_config.database.query_timeout ); println!( " Position cache TTL: {:?}", staging_config.cache.position_ttl ); println!( " Safety check timeout: {:?}", staging_config.limits.safety_check_timeout ); println!(); // Example 5: Validation println!("5. Configuration validation:"); match config.validate() { Ok(_) => println!(" ✓ Configuration is valid"), Err(e) => println!(" ✗ Configuration error: {}", e), } println!(); // Example 6: Environment variable override (simulated) println!("6. Environment variable overrides:"); println!(" Set DATABASE_QUERY_TIMEOUT_MS=500 to override query timeout"); println!(" Set CACHE_POSITION_TTL_SECS=30 to override position cache TTL"); println!(" Set ML_MAX_BATCH_SIZE=16384 to override ML batch size"); println!(" Set RISK_VAR_CONFIDENCE=0.99 to override VaR confidence"); println!(); // Example 7: Comparing environments println!("7. Environment comparison (timeouts in ms):"); println!(" Configuration | Development | Staging | Production"); println!(" ----------------------- | ----------- | ------- | ----------"); println!( " DB Query Timeout | {:>11} | {:>7} | {:>10}", dev_config.database.query_timeout.as_millis(), staging_config.database.query_timeout.as_millis(), prod_config.database.query_timeout.as_millis() ); println!( " Safety Check Timeout | {:>11} | {:>7} | {:>10}", dev_config.limits.safety_check_timeout.as_millis(), staging_config.limits.safety_check_timeout.as_millis(), prod_config.limits.safety_check_timeout.as_millis() ); println!( " ML Inference Timeout | {:>11} | {:>7} | {:>10}", dev_config.limits.ml_inference_timeout.as_millis(), staging_config.limits.ml_inference_timeout.as_millis(), prod_config.limits.ml_inference_timeout.as_millis() ); println!(); // Example 8: Cache TTLs (in seconds) println!("8. Cache TTL comparison (seconds):"); println!(" Cache Type | Development | Staging | Production"); println!(" ------------------ | ----------- | ------- | ----------"); println!( " Position Cache | {:>11} | {:>7} | {:>10}", dev_config.cache.position_ttl.as_secs(), staging_config.cache.position_ttl.as_secs(), prod_config.cache.position_ttl.as_secs() ); println!( " VaR Cache | {:>11} | {:>7} | {:>10}", dev_config.cache.var_ttl.as_secs(), staging_config.cache.var_ttl.as_secs(), prod_config.cache.var_ttl.as_secs() ); println!( " Market Data Cache | {:>11} | {:>7} | {:>10}", dev_config.cache.market_data_ttl.as_secs(), staging_config.cache.market_data_ttl.as_secs(), prod_config.cache.market_data_ttl.as_secs() ); println!(); println!("=== Example Complete ==="); Ok(()) }