5 releases
new 0.1.4 | Mar 4, 2025 |
---|---|
0.1.3 | Mar 3, 2025 |
0.1.2 | Feb 25, 2025 |
0.1.1 | Dec 21, 2024 |
0.1.0 | Dec 21, 2024 |
#1546 in Parser implementations
392 downloads per month
6KB
57 lines
Header Config Parser
A Rust library for parsing hierarchical configuration files using Markdown-style headers, transforming nested sections into flat key-value pairs with namespaced keys.
Features
- ๐ Header-based namespacing
- โ Automatic key hierarchy flattening
- ๐งน Whitespace-tolerant parsing
- ๐ฆ Empty value handling
- ๐ Simple string-based lookups
Installation
Add to your Cargo.toml
:
[dependencies]
header-config = "0.1"
File Format Specification
Basic Syntax
# Server Config
port 8080
timeout 30
# Database
host localhost
user admin
## Replica
host replica.db
Key Features
- Headers create namespaces using
#
symbols - Keys are whitespace-separated from values
- Empty values allowed (
key
without value) - Nesting with subheaders (
## Subsection
)
Parsing Rules
- Header levels determine namespace depth
- It's not allowed to go more than one header level deeper at once
- Keys inherit all parent header namespaces
- Case-sensitive matching
- Duplicates aren't allowed
Example
The format looks like this:
key1 value
key2
# HeaderA
key1 value
key2
# HeaderB
key1 value
key2
## SubheaderA
key1 value
key2
## SubheaderB
key1 value
key2
The created mapping will be something like this:
"key1" -> "value"
"key2" -> ""
"HeaderA:key1" -> "value"
"HeaderA:key2" -> ""
"HeaderB:key1" -> "value"
"HeaderB:key2" -> ""
"HeaderB:SubheaderA:key1" -> "value"
"HeaderB:SubheaderA:key2" -> ""
"HeaderB:SubheaderB:key1" -> "value"
"HeaderB:SubheaderB:key2" -> ""
Dependencies
~1โ1.6MB
~30K SLoC