Rust-使用config配置程序
在应用开发中,我们通常会将一些可变项放到配置文件中。
此次将使用config
来进行配置项的读取。
安装依赖项
config提供api,去一个字段一个字段的读取配置。但是有一种更高级地方法,那就是声明一个struct,然后config帮我们进行反序列化处理,如果字段有错,会直接报错config::ConfigError
。此方法更安全,更rust,代码脉络也更强。、
因为要反序列化,所以要为struct启用Deserialize
的trait。故而还要引用serde,并启用derive
特性。
[dependencies]
config = "0.14.0"
serde = { version = "1.0.196", features = ["derive"] }
或者使用:
cargo add config serde -F serde/derive
声明配置struct
此处的结构体为一个典型示例
src/main.rs
use serde::Deserialize;
#[derive(Debug,Deserialize)]
pub struct AppConfig {
address: String, // 配置项地址
port: u16, // 配置项端口
server_name: String, // 配置项服务器名称
database_url: String, // 配置项数据库URL
database_port: u16, // 配置项数据库端口
database_user: String, // 配置项数据库用户名
database_password: String, // 配置项数据库密码
debug: bool, // 是否启用应用的调试(debug)模式
}
创建配置文件
在程序根目录下创建一个toml
文件。这里创建一个名为config.toml
的文件。
config.toml
# 配置项地址
address="0.0.0.0"
# 配置项端口
port=8080
# 配置项服务器名称
server_name= "这是一个config库的demo"
#配置项数据库URL
database_url="0.0.0.0"
# 配置项数据库端口
database_port="7890"
# 配置项数据库用户名
database_user="root"
# 配置项数据库密码
database_password="ABCabc12345678"
# 是否启用应用的调试(debug)模式
debug=true
读取配置文件
use config::{Config, File};
fn main() {
let config = Config::builder().add_source(File::with_name("config.toml")).build().expect("读取配置文件错误");;
let app_config: AppConfig = config.try_deserialize().expect("反序列化失败!");
println!("{:#?}", app_config); // 输出配置信息
}
输出如下:
AppConfig {
address: "0.0.0.0",
port: 8080,
server_name: "这是一个config库的demo",
database_url: "0.0.0.0",
database_port: 7890,
database_user: "root",
database_password: "ABCabc12345678",
debug: true,
}
完整代码
├─src
│ └─main.rs
└─config.toml
src/main.rs
use config::{Config, File};
use serde::Deserialize;
#[derive(Debug,Deserialize)]
pub struct AppConfig {
address: String, // 配置项地址
port: u16, // 配置项端口
server_name: String, // 配置项服务器名称
database_url: String, // 配置项数据库URL
database_port: u16, // 配置项数据库端口
database_user: String, // 配置项数据库用户名
database_password: String, // 配置项数据库密码
debug: bool, // 是否启用应用的调试(debug)模式
}
fn main() {
let config = Config::builder().add_source(File::with_name("config.toml")).build().expect("读取配置文件错误");
let app_config: AppConfig = config.try_deserialize().expect("反序列化失败!");
println!("{:#?}", app_config); // 输出配置信息
}
config.toml
# 配置项地址
address="0.0.0.0"
# 配置项端口
port=8080
# 配置项服务器名称
server_name= "这是一个config库的demo"
#配置项数据库URL
database_url="0.0.0.0"
# 配置项数据库端口
database_port="7890"
# 配置项数据库用户名
database_user="root"
# 配置项数据库密码
database_password="ABCabc12345678"
# 是否启用应用的调试(debug)模式
debug=true
Rust-使用config配置程序
https://lkhsss.github.io/编程/Rust/rust-使用config配置程序/