Leggere file TOML in Rust

Mattepuffo's logo
Leggere file TOML in Rust

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!


Condividi

Commentami!