DragonSlayer_14 a2f8c8978e
Testing Build, Check & Preview Release / Build, Check & Create Preview Release (push) Skipped
Main Release & Publish / Erkenne relevante Code-Änderungen (push) Successful in 12s
Security Scans / Trivy & OSV-Scanner (push) Successful in 52s
Main Release & Publish / Build, Publish Crate to Gitea Registry & Create Release (push) Successful in 1m7s
TruffleHog Secret Scan / TruffleHog (push) Successful in 9s
Merge pull request 'Merge testing in main: Release 1.0.6' (#18) from testing into main
Reviewed-on: #18
2026-09-13 12:44:59 +00:00
2026-08-26 18:53:16 +02:00

Config (config-ctdra)

config-ctdra ist eine leichtgewichtige, threadsichere Konfigurationsverwaltungs-Crate für Rust mit automatischer Pfadermittlung für Root- und regulären Benutzermodus sowie Unterstützung für beliebige benutzerdefinierte Datenstrukturen.

Merkmale

  • Frei definierbare Konfigurationsstrukturen: Beliebige Rust-Strukturen mit serde (Serialize, Deserialize, Default).
  • Einheitliche Pfadauflösung:
    • Root-Modus (Linux/Unix UID 0): Konfigurationsdateien werden unter /etc/<programmname>/<config_name>.toml abgelegt.
    • Benutzermodus: Standardmäßiges Benutzerverzeichnis (z. B. ~/.config/<programmname>/<config_name>.toml via confy).
    • Individuell anpassbar: Dateinamen (set_config_name), Verzeichnisse (set_custom_dir) oder explizite Dateipfade (set_custom_path). Der Programmname wird automatisch über program-ctdra ermittelt.
  • Globales Caching (get_config::<T>()): Einmaliges Laden und threadsicheres Zwischenspeichern statischer Referenzen pro Konfigurationstyp.
  • Atomare Operationen: load, store, modify, modify_config für konsistentes Laden, Bearbeiten und Speichern.

Installation

Aus der Gitea Cargo Package Registry

Füge die Gitea-Registry zu deiner ~/.cargo/config.toml hinzu:

[registries.gitea]
index = "sparse+https://gitea.creative-dragonslayer.de/api/packages/Rust-Crates/cargo/"

Füge anschließend die Abhängigkeit in deiner Cargo.toml ein:

[dependencies]
config-ctdra = { version = "1.0.1", registry = "gitea" }

Alternativ als Git- oder Pfad-Abhängigkeit:

[dependencies]
config-ctdra = { git = "https://gitea.creative-dragonslayer.de/Rust-Crates/config.git", branch = "main" }
# oder lokal:
# config-ctdra = { path = "../Config" }

Verwendung

1. Eigene Konfigurationsstruktur definieren

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct AppConfig {
    pub general: General,
    pub database: Database,
}

impl Default for AppConfig {
    fn default() -> Self {
        Self {
            general: General::default(),
            database: Database::default(),
        }
    }
}

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct General {
    pub log_level: String,
    pub workers: usize,
}

impl Default for General {
    fn default() -> Self {
        Self {
            log_level: "info".to_string(),
            workers: 4,
        }
    }
}

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Database {
    pub url: String,
}

impl Default for Database {
    fn default() -> Self {
        Self {
            url: "postgres://localhost/app".to_string(),
        }
    }
}

2. Globales Caching mit get_config

use config_ctdra::get_config;

fn main() {
    let cfg = get_config::<AppConfig>();
    println!("Log-Level: {}", cfg.general.log_level);
    println!("DB URL: {}", cfg.database.url);
}

3. Konfiguration modifizieren

use config_ctdra::modify_config;

fn update_settings() {
    modify_config::<AppConfig, _>(|cfg| {
        cfg.general.workers = 8;
    });
}

4. Manuelles Laden und Speichern

use config_ctdra::{load, store};

fn custom_workflow() -> Result<(), config_ctdra::ConfyError> {
    let mut cfg: AppConfig = load()?;
    cfg.general.log_level = "debug".to_string();
    store(&cfg)?;
    Ok(())
}

Entwicklung und Tests

# Überprüfen
cargo check --all-targets

# Tests ausführen
cargo test

# Release kompilieren
cargo build --release

# Crate paketieren
cargo package

Lizenz

Dieses Projekt ist unter der GNU General Public License v3.0 oder neuer lizenziert (GPL-3.0-or-later). Siehe LICENSE.

S
Description
"config" ist eine leichtgewichtige, threadsichere Konfigurationsverwaltungs-Crate für Rust mit automatischer Pfadermittlung für Root- und regulären Benutzermodus sowie Unterstützung für beliebige benutzerdefinierte Datenstrukturen.
Readme GPL-3.0
246 KiB
2026-09-13 12:46:48 +00:00
Languages
Rust 59.4%
Python 40.6%