examples/standalone/04_config_validator.cat
#!/usr/bin/env catnip
# Validateur de configuration
# Usage: catnip config_validator.cat

# Configuration à valider (en production, charger depuis JSON/YAML)
config = dict(
    server_port=8080,
    max_connections=100,
    timeout=30,
    debug_mode=False,
    log_level='info'
)

# État de validation
valid = True
errors = list()

# Règle 1: Port dans intervalle valide
port = config['server_port']
if port < 1024 {
    valid = False
    errors = errors + list("Port < 1024 (privilégié)")
}
if port > 65535 {
    valid = False
    errors = errors + list("Port > 65535 (invalide)")
}

# Règle 2: Max connections raisonnable
max_conn = config['max_connections']
if max_conn < 10 {
    valid = False
    errors = errors + list("max_connections trop faible (min 10)")
}
if max_conn > 10000 {
    valid = False
    errors = errors + list("max_connections trop élevé (max 10000)")
}

# Règle 3: Timeout positif
timeout = config['timeout']
if timeout <= 0 {
    valid = False
    errors = errors + list("timeout doit être > 0")
}

# Règle 4: Log level valide
log_level = config['log_level']
valid_levels = list('debug', 'info', 'warning', 'error')
level_valid = False
i = 0
while i < 4 {
    if log_level == valid_levels[i] {
        level_valid = True
    }
    i = i + 1
}
if level_valid == False {
    valid = False
    errors = errors + list("log_level invalide (debug/info/warning/error)")
}

# Afficher résultat
print("Validation de configuration")
print("")

if valid {
    print("✓ Configuration valide")
    print("")
    print("Paramètres :")
    print("  - Port : " + str(config['server_port']))
    print("  - Max connections : " + str(config['max_connections']))
    print("  - Timeout : " + str(config['timeout']) + "s")
    print("  - Debug : " + str(config['debug_mode']))
    print("  - Log level : " + config['log_level'])
} else {
    print("✗ Configuration invalide")
    print("")
    print("Erreurs :")
    j = 0
    while j < len(errors) {
        print("  - " + errors[j])
        j = j + 1
    }
}

# Retourner status (0 = succès, 1 = échec)
if valid { 0 } else { 1 }