camel-config 0.2.1

Configuration and route discovery for rust-camel
Documentation

camel-config

Configuration system for rust-camel.

Overview

This crate provides configuration loading and route discovery for rust-camel applications.

Features

  • Configuration Loading: Load configuration from TOML files
  • Profile Support: Multiple environments (development, production, etc.)
  • Environment Variables: Override configuration with CAMEL_* prefix
  • Route Discovery: Auto-discover route files using glob patterns

Usage

Basic Usage

use camel_config::CamelConfig;
use camel_core::CamelContext;

// Load configuration
let config = CamelConfig::from_file("Camel.toml")?;

// Create context
let mut ctx = CamelContext::new();
ctx.register_component(TimerComponent::new());

// Load routes from discovered files
let routes = camel_config::discover_routes(&config.routes)?;
for route in routes {
    ctx.add_route_definition(route)?;
}

ctx.start().await?;

Configuration File

Create a Camel.toml file:

[default]
routes = ["routes/**/*.yaml"]
log_level = "INFO"

[production]
log_level = "ERROR"

Profile Selection

// Via environment variable
std::env::set_var("CAMEL_PROFILE", "production");

// Or programmatically
let config = CamelConfig::from_file_with_profile("Camel.toml", Some("production"))?;

Environment Variables

Override any configuration value:

export CAMEL_PROFILE=production
export CAMEL_LOG_LEVEL=DEBUG
export CAMEL_ROUTES_0="custom/*.yaml"

Route Discovery

Routes are discovered using glob patterns:

# routes/my-route.yaml
routes:
  - id: "hello-timer"
    from: "timer:tick?period=1000"
    steps:
      - to: "log:info"

API

CamelConfig

  • from_file(path) - Load configuration from file
  • from_file_with_profile(path, profile) - Load with specific profile
  • from_file_with_profile_and_env(path, profile) - Load with env var overrides

discover_routes

  • discover_routes(patterns) - Discover route files matching patterns

Configuration Schema

[default]
routes = ["routes/**/*.yaml"]
log_level = "INFO" | "DEBUG" | "WARN" | "ERROR"
timeout_ms = 5000

[default.components.timer]
period = 1000

[default.components.http]
connect_timeout_ms = 5000
max_connections = 100

[default.observability]
metrics_enabled = true
tracing_enabled = false

[production]
log_level = "ERROR"

Examples

See the examples/ directory:

  • config-basic - Basic configuration usage
  • config-profiles - Multi-environment setup

License

Apache-2.0