#header #configuration #hierarchy #config-parser #parser #markdown-parser #markdown

header-config

Runtime parser for hierarchical configurations using Markdown-style headers

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

Download history 289/week @ 2024-12-21 26/week @ 2024-12-28 36/week @ 2025-01-04 11/week @ 2025-01-11 14/week @ 2025-02-08 17/week @ 2025-02-15 107/week @ 2025-02-22 254/week @ 2025-03-01

392 downloads per month

MIT/Apache

6KB
57 lines

Header Config Parser

Crates.io Docs.rs License

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