actix-toml

A Rust crate that allows for configuring actix-web's HttpServer instance through a TOML file.

Usage

Add this to your Cargo.toml:

toml [dependencies] actix-toml = "0.5" actix-web = "3.1" env_logger = "0.8"

Basic usage

Import these items into your crate:

rust use actix_toml::{ApplySettings, AtResult, Settings}; use actix_web::http::ContentEncoding; use std::sync::Arc;

They can be used like this: ``` rust

[actix_rt::main]

async fn main() -> std::io::Result<()> { let mut settings = Settings::parsetoml("Server.toml") .expect("Failed to parse Settings from Server.toml"); // If the environment variable $APPLICATION__HOSTS is set, // have its value override the settings.actix.hosts setting: Settings::overridefieldwithenvvar( &mut settings.actix.hosts, "APPLICATIONHOSTS" )?; initlogger(&settings); let settings = Arc::new(settings); // Leverage Arc to not waste memory let settings2 = Arc::clone(&settings); HttpServer::new(move || { App::new() // Include this .wrap() call for compression settings to take effect: .wrap(Compress::new(if settings2.enablecompression { ContentEncoding::Deflate } else { ContentEncoding::Identity })) .wrap(Logger::default()) .data(settings2.clone()) // <- Make Settings available to handlers // Define routes: .service(index) // <- Add routes here as normal }) .applysettings(&settings) // <- apply the Settings to actix's HttpServer .run() .await }

/// Initialize the logging infrastructure fn initlogger(settings: &Settings) { if !settings.actix.enablelog { return } std::env::setvar("RUSTLOG", match settings.actix.mode { Mode::Development => "actixweb=debug", Mode::Production => "actixweb=info", }); std::env::setvar("RUSTBACKTRACE", "1"); env_logger::init(); } ```

Custom Settings

There is a way to extend the available settings. This can be used to combine the settings provided by actix-web and those provided by application server built using actix.

Have a look at the override_extended_field_with_custom_type test in src/lib.rs to see how.

WIP

The main feature that would be nice to have but currently is not implemented, is SSL-support. If you're interested, please contact me or send a PR.

Special Thanks

This crate was made possible by support from Accept B.V.