rust rocket读取自定义配置
rust rocket读取自定义配置,以自定义端口为例
Rocket.toml
[development] port = 8200 [production] port = 80
cargo.toml
[dependencies]
rocket = { version = "0.5.1", features = ["json"] }
serde = { version = "1.0.204", features = ["derive"] }
#deadpool-redis = { version = "0.9", features = ["serde"] }
#redis = { version = "0.21", default-features = false, features = ["tls"] }
figment = "0.10.8"
config = "0.14.0"
toml = "0.5"
main.rs
#[macro_use] extern crate rocket;
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;
use rocket::{Config, Build};
use rocket::fairing::AdHoc;
use rocket::{figment::Figment, serde::{Deserialize, Serialize, json::Json}};
use rocket::serde::json::serde_json::from_reader;
use toml::from_str;
//访问链接示例:http://localhost:8000/hello
#[get("/hello")]
fn hello(name: &str, age: u8, is_male: bool) -> String {
if is_male {
format!("姓名 {} ,年龄 {}, 性别 男!", name, age)
} else {
format!("姓名 {} ,年龄 {}, 性别 女!", name, age)
}
}
#[derive(Deserialize)]
struct MyConfig {
development: DevConfig,
production: ProdConfig,
}
#[derive(Deserialize)]
struct DevConfig {
port: u16,
}
#[derive(Deserialize)]
struct ProdConfig {
port: u16,
}
fn load_config() -> Result> {
let mut file = File::open("Rocket.toml")?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
Ok(from_str(&contents)?)
}
#[launch]
fn rocket() -> _ {
let config = load_config().expect("Failed to load config");
let port = config.development.port;
println!("x = {}", config.development.port);
rocket::custom(Config::figment()
.merge(("port", port))
)
.mount("/", routes![hello])
}

