EngineConfig struct defines the structure of the config.yaml file used to configure the iii framework engine.
EngineConfig Struct
src/modules/config.rs
Fields
u16
default:"49134"
WebSocket server port. Defaults to
49134 if not specified.Vec<ModuleEntry>
default:"[]"
List of modules to load. Each entry specifies a module class and optional configuration.
ModuleEntry Struct
src/modules/config.rs
Fields
String
required
Fully qualified module class name (e.g.,
"modules::api::RestApiModule")Option<Value>
default:"None"
Module-specific JSON configuration. Structure varies by module type.
YAML Configuration
Basic Example
config.yaml
With Environment Variables
The configuration supports environment variable expansion using the${VAR_NAME} or ${VAR_NAME:default} syntax:
config.yaml
${VAR_NAME}- Required variable (panics if not set)${VAR_NAME:default}- Optional with default value${VAR_NAME:}- Optional with empty string default
Complete Example
config.yaml
Methods
EngineConfig::config_file_or_default()
Loads configuration from a file or returns default configuration.
&str
required
Path to YAML configuration file
Result<EngineConfig> - Parsed config or error
Behavior:
- If file exists: Parses YAML, expands environment variables, returns config
- If file missing: Returns config with default modules from inventory
- If parse error: Returns error with details
src/main.rs
EngineConfig::expand_env_vars()
Expands environment variables in YAML content.
&str
required
Raw YAML content containing environment variable placeholders
String - YAML content with variables expanded
Panics: If a required variable (without default) is not set
Example:
EngineConfig::default_modules()
Returns configuration with default modules from the inventory.
EngineConfig with default port and modules
Constants
DEFAULT_PORT
DEFAULT_HOST
Module Configuration by Type
HTTP Module
Queue Module
Stream Module
State Module
Cron Module
Observability Module
Default Modules
When usingconfig_file_or_default() with a missing config file, the following default modules are loaded:
- All modules registered in the inventory with
is_default = true - Modules are loaded with
config: None
inventory::submit! macro calls.
Environment Variable Examples
Required Variables
Optional with Defaults
Complex URLs
Loading Configuration
From File
Programmatically
Error Handling
Parse Errors
Missing Environment Variables
Best Practices
Use environment variables for secrets: Never commit API keys, passwords, or tokens to config files
Provide sensible defaults: Use
${VAR:default} syntax for non-sensitive configurationDocument required variables: List all required environment variables in your README
Related
EngineBuilder
Learn about the builder API
Modules Overview
Available modules and configuration
Deployment
Production configuration guide
Custom Modules
Build custom modules