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://blog.lkhsss.cn/编程/Rust/rust-使用config配置程序/
作者
Lkhsss
发布于
2024年2月16日
许可协议