Nyx con Ejemplos

Configuración del proxy

std/toml parsea archivos de configuración TOML en un Map plano con claves de notación de punto. Los helpers toml_get_int/bool/string convierten valores con defaults. Los arrays de tablas ([[upstream]]) requieren un parseo personalizado.

Código

// nyx-proxy config — parsing proxy.toml with std/toml
// Config nyx-proxy — parsear proxy.toml con std/toml

import "std/toml"

fn main() -> int {
    // A typical proxy.toml config file
    let config_text: String = "[server]\nport = 443\ntls = true\n\n[[upstream]]\nname = \"api\"\nhost = \"127.0.0.1\"\nport = 3000\n\n[[upstream]]\nname = \"static\"\nhost = \"127.0.0.1\"\nport = 3001\n\n[health]\ninterval = 5\ntimeout = 2\nthreshold = 3\n\n[ratelimit]\nper_ip_per_sec = 100"

    let parsed: Map = toml_parse(config_text)

    // Read server config
    let port: int = toml_get_int(parsed, "server.port", 443)
    let tls: bool = toml_get_bool(parsed, "server.tls", false)
    print("server: port=" + int_to_string(port) + " tls=" + int_to_string(tls))

    // Read health config
    let interval: int = toml_get_int(parsed, "health.interval", 10)
    let threshold: int = toml_get_int(parsed, "health.threshold", 3)
    print("health: interval=" + int_to_string(interval) + "s threshold=" + int_to_string(threshold))

    // Read rate limit config
    let rate: int = toml_get_int(parsed, "ratelimit.per_ip_per_sec", 50)
    print("ratelimit: " + int_to_string(rate) + " req/s per IP")

    // Note: TOML arrays-of-tables ([[upstream]]) are not supported by std/toml
    // nyx-proxy uses a custom config loader for those

    return 0
}

Salida

server: port=443 tls=1
health: interval=5s threshold=3
ratelimit: 100 req/s per IP

Explicación

La configuración como código está bien hasta que necesitás que un humano la edite. TOML es el punto justo: es legible como INI, tipado como JSON, y no tiene los footguns de espaciado de YAML. std/toml aplana las tablas anidadas en claves de notación de punto ([server] + port se convierte en "server.port"), lo que mantiene la API como un Map simple. Los helpers toml_get_* manejan las dos cosas que siempre se necesitan: coerción de tipos y valores por defecto — así las claves faltantes no rompen nada, sino que caen a un valor razonable. Los arrays de tablas ([[upstream]]) son comunes en configuraciones de proxy para definir una lista de backends; std/toml todavía no los soporta, así que nyx-proxy incluye un pequeño parser personalizado para su bloque upstream.

← Anterior Siguiente →

Source: examples/by-example/85-proxy-config.nx