Thanks to visit codestin.com
Credit goes to lib.rs

2 releases

Uses new Rust 2024

0.1.1 Oct 23, 2025
0.1.0 Oct 22, 2025

#1508 in Configuration


Used in diode-http

MIT/Apache

115KB
2K SLoC

diode-base

Base functionality and utilities for diode applications, providing essential building blocks for creating robust, configurable, and maintainable services.

This crate extends the core diode dependency injection framework with practical utilities for real-world applications including configuration management, daemon services, command-line interfaces, and application lifecycle management.

Core Components

  • Configuration System: Type-safe configuration loading and merging from multiple sources
  • Daemon Framework: Long-running background services with graceful shutdown
  • Command System: CLI framework with subcommands and dependency injection
  • Bundle Management: Modular application component grouping
  • Tracing Integration: Structured logging and observability
  • Dynamic Configuration: Runtime configuration updates and hot-reloading

Quick Start

use diode::App;
use diode_base::{RunMainExt, AddCommandExt, Command};
use std::process::ExitCode;
use std::sync::Arc;
use clap::Command as ClapCommand;

struct HelloCommand;

impl Command for HelloCommand {
    fn command() -> ClapCommand {
        ClapCommand::new("hello").about("Says hello")
    }

    async fn main(_app: Arc<App>, _matches: clap::ArgMatches) -> ExitCode {
        println!("Hello from diode!");
        ExitCode::SUCCESS
    }
}

#[tokio::main]
async fn main() -> ExitCode {
    App::builder()
        .add_command::<HelloCommand>()
        .run_main()
        .await
}

Configuration Example

use diode::App;
use diode_base::Config;
use serde::{Deserialize, Serialize};

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

let app = App::builder()
    .add_component(Config::new().with("database", DatabaseConfig {
        host: "localhost".to_string(),
        port: 5432,
    }))
    .build()
    .await?;

let config = app.get_component_ref::<Config>().unwrap();
let db_config = config.get::<DatabaseConfig>("database")?;
println!("Database: {}:{}", db_config.host, db_config.port);

Features

  • macros (default): Enables procedural macros for simplified configuration and service definitions

Dependencies

~20–35MB
~416K SLoC