Leggere file TOML in Rust
In ambito Rust i file TOML vengono molto usati.
In questo articolo vediamo come fare.
Erroneamente pensavo non ci neanche librerie esterne, ma non è così.
Queste quelle che ci servono:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
toml = "0.8"
Questo il file da leggere:
title = "Test TOML"
version = "1.0.0"
[database]
host = "localhost"
port = 5432
username = "root"
password = "password"
databases = ["db_test"]
pool_size = 10
ssl_enabled = true
[server]
host = "0.0.0.0"
port = 8080
debug = false
allowed_hosts = ["*"]
[logging]
level = "INFO"
format = "%(asctime)s - %(levelname)s - %(message)s"
handlers = ["console", "file"]
[cache]
enabled = true
ttl = 3600
max_size = 1000
[features]
enable_api = true
rate_limit = 100
Qui sotto un pò di codice:
use serde::Deserialize;
use std::fs;
#[derive(Debug, Deserialize)]
struct Config {
title: String,
version: String,
database: Database,
server: Server,
logging: Logging,
cache: Cache,
features: Features,
}
#[derive(Debug, Deserialize)]
struct Database {
host: String,
port: u16,
username: String,
password: String,
databases: Vec<String>,
pool_size: u32,
ssl_enabled: bool,
}
#[derive(Debug, Deserialize)]
struct Server {
host: String,
port: u16,
debug: bool,
allowed_hosts: Vec<String>,
}
#[derive(Debug, Deserialize)]
struct Logging {
level: String,
format: String,
handlers: Vec<String>,
}
#[derive(Debug, Deserialize)]
struct Cache {
enabled: bool,
ttl: u32,
max_size: u32,
}
#[derive(Debug, Deserialize)]
struct Features {
enable_api: bool,
rate_limit: u32,
}
fn main() {
let toml_content = fs::read_to_string("C:\TEST\test.toml")
.expect("Impossibile leggere il file");
let config: Config = toml::from_str(&toml_content)
.expect("Errore nel parsing del TOML");
println!("Configurazione caricata:");
println!("Title: {}", config.title);
println!("Version: {}", config.version);
println!("\nDatabase:");
println!(" Host: {}", config.database.host);
println!(" Port: {}", config.database.port);
println!(" Username: {}", config.database.username);
println!(" Databases: {:?}", config.database.databases);
println!("\nServer:");
println!(" Host: {}", config.server.host);
println!(" Port: {}", config.server.port);
println!(" Debug: {}", config.server.debug);
println!("\nCache:");
println!(" Enabled: {}", config.cache.enabled);
println!(" TTL: {} secondi", config.cache.ttl);
println!("\nFeatures:");
println!(" API abilitata: {}", config.features.enable_api);
println!(" Rate limit: {}", config.features.rate_limit);
}
Enjoy!
rust cargo toml serde
Commentami!