A Rust crate that allows for configuring actix-web's HttpServer instance through a TOML file.
Add this to your Cargo.toml:
toml
[dependencies]
actix-toml = "0.5"
actix-web = "3.1"
env_logger = "0.8"
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
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(); } ```
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.
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.
This crate was made possible by support from Accept B.V.