Rust配置管理库solar-config的使用:轻量级、高效且灵活的应用程序配置解决方案

Rust配置管理库solar-config的使用:轻量级、高效且灵活的应用程序配置解决方案

简介

solar-config 是 Solar 编译器的配置管理库,提供轻量级、高效且灵活的应用程序配置解决方案。

安装

在项目目录中运行以下 Cargo 命令:

cargo add solar-config

或者在 Cargo.toml 中添加以下行:

solar-config = "0.1.5"

示例代码

以下是一个完整的示例,展示如何使用 solar-config 进行配置管理:

use solar_config::Config;

fn main() {
    // 创建一个新的配置实例
    let mut config = Config::new();
    
    // 设置配置项
    config.set("database.url", "postgres://user:pass@localhost/db");
    config.set("server.port", "8080");
    config.set("logging.level", "info");
    
    // 获取配置值
    if let Some(db_url) = config.get("database.url") {
        println!("Database URL: {}", db_url);
    }
    
    // 检查配置是否存在
    if config.has("server.port") {
        println!("Server port is configured");
    }
    
    // 删除配置项
    config.remove("logging.level");
    
    // 检查配置项是否已删除
    if !config.has("logging.level") {
        println!("Logging level configuration has been removed");
    }
}

完整示例demo

以下是一个更完整的示例,展示solar-config的更多功能:

use solar_config::Config;

fn main() {
    // 初始化配置
    let mut config = Config::new();
    
    // 1. 设置多个配置项
    config.set("app.name", "MyApp");
    config.set("app.version", "1.0.0");
    config.set("database.host", "localhost");
    config.set("database.port", "5432");
    config.set("debug.mode", "false");
    
    // 2. 获取并打印配置
    println!("App Configurations:");
    println!("-------------------");
    if let Some(name) = config.get("app.name") {
        println!("App Name: {}", name);
    }
    if let Some(version) = config.get("app.version") {
        println!("Version: {}", version);
    }
    
    // 3. 检查配置是否存在
    if config.has("database.host") && config.has("database.port") {
        println!("\nDatabase Configuration:");
        println!("----------------------");
        println!("Host: {}", config.get("database.host").unwrap());
        println!("Port: {}", config.get("database.port").unwrap());
    }
    
    // 4. 更新配置项
    config.set("debug.mode", "true");
    println!("\nDebug Mode: {}", config.get("debug.mode").unwrap());
    
    // 5. 删除配置项
    config.remove("app.version");
    println!("\nAfter removing version:");
    println!("Version exists: {}", config.has("app.version"));
}

特性

  • 轻量级:仅 12.3 KiB 大小
  • 高效:快速读取和写入配置
  • 灵活:支持动态添加、修改和删除配置项
  • 简单易用的 API

许可证

solar-config 采用 MIT 或 Apache-2.0 双许可证。

所有者

  • Georgios Konstantopoulos (gakonst)
  • DaniPopes

分类

  • 密码学
  • 编译器
  • 加密货币

1 回复

Rust配置管理库solar-config使用指南

简介

solar-config是一个轻量级、高效且灵活的Rust应用程序配置管理库。它提供了简单易用的API来加载、管理和访问应用程序配置,支持多种配置格式和环境变量覆盖。

主要特性

  • 轻量级设计,无额外依赖
  • 支持JSON、YAML、TOML等常见配置格式
  • 环境变量覆盖支持
  • 类型安全配置访问
  • 灵活的配置源组合

安装

在Cargo.toml中添加依赖:

[dependencies]
solar-config = "0.3"

基本使用方法

1. 加载配置文件

use solar_config::Config;

fn main() {
    // 从文件加载配置
    let config = Config::from_file("config.toml").expect("Failed to load config");
    
    // 从字符串加载配置
    let config_str = r#"
        [database]
        host = "localhost"
        port = 5432
    "#;
    let config = Config::from_str(config_str).expect("Failed to parse config");
}

2. 访问配置值

let db_host: String = config.get("database.host").expect("Database host not found");
let db_port: i32 = config.get("database.port").expect("Database port not found");

println!("Database connection: {}:{}", db_host, db_port);

3. 环境变量覆盖

// 假设有环境变量 DATABASE_HOST=prod.db.example.com
let config = Config::from_file("config.toml")
    .with_env_prefix("APP") // 可选前缀
    .with_env_overrides(); // 启用环境变量覆盖

// 环境变量值会覆盖配置文件中的值
let db_host: String = config.get("database.host").unwrap();
assert_eq!(db_host, "prod.db.example.com");

高级用法

1. 多配置源合并

let base_config = Config::from_file("base_config.toml")?;
let dev_config = Config::from_file("dev_overrides.toml")?;

let merged = base_config.merge(&dev_config);

2. 类型安全配置结构

#[derive(Debug, Deserialize)]
struct DatabaseConfig {
    host: String,
    port: u16,
    username: String,
    password: String,
}

let db_config: DatabaseConfig = config.extract("database")?;

3. 默认值支持

let retry_count = config.get_or("api.retry_count", 3); // 默认3次

完整示例

use solar_config::Config;
use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct AppConfig {
    database: DatabaseConfig,
    server: ServerConfig,
}

#[derive(Debug, Deserialize)]
struct DatabaseConfig {
    url: String,
    pool_size: u32,
}

#[derive(Debug, Deserialize)]
struct ServerConfig {
    host: String,
    port: u16,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 加载并解析配置
    let config = Config::from_file("config.toml")?
        .with_env_overrides();
    
    // 提取为类型安全结构
    let app_config: AppConfig = config.extract()?;
    
    println!("Server will run on {}:{}", 
        app_config.server.host, 
        app_config.server.port);
    
    Ok(())
}

配置文件示例 (config.toml)

[database]
url = "postgres://user:pass@localhost:5432/db"
pool_size = 10

[server]
host = "0.0.0.0"
port = 8080

总结

solar-config提供了简单而强大的配置管理能力,适合各种规模的Rust项目。它的轻量级设计和灵活的特性使得应用程序配置管理变得简单而高效。

回到顶部