comfyg 0.1.0

A minimal, no_std-compatible typed configuration file parser
Documentation
  • Coverage
  • 0%
    0 out of 32 items documented0 out of 15 items with examples
  • Size
  • Source code size: 12.49 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 2.34 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 18s Average build duration of successful builds.
  • all releases: 18s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • Hoteira/comfyg
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • Hoteira

Comfyg 😴

A minimal, no_std-compatible configuration file parser for custom config formats inspired by Hyprland-style syntax. Built for use in OS projects, embedded environments, and anywhere you want a lightweight, typed config parser without pulling in heavy dependencies.


Format

Config files follow a simple key = value syntax. Comments start with # and can appear on their own line or inline. Lines not containing = signs are ignored.

# This is a comment
nval = true
v = 42
bg_color = #FF5733FF  # inline comment

Values are typed — you define what type each key maps to, and the parser handles validation and conversion.


Supported Types

Bool

Accepts: true, True, TRUE, t, T, 1, false, False, FALSE, f, F, 0

Number

Accepts decimal floats and hex integers prefixed with 0x or 0X.

v = 3.14
v = 0xFF

Color

Accepts multiple formats:

bg = #RRGGBB
bg = #RRGGBBAA
bg = RRGGBB
bg = RRGGBBAA
bg = 0xRRGGBBAA
bg = rgb(255, 87, 51)
bg = rgba(255, 87, 51, 255)

Colors are parsed into [u8; 4] (RGBA).

String

Any value not matched by another type is treated as a raw string.


Usage

Add to your Cargo.toml:

[dependencies]
comfyg = "0.1.0"

For no_std environments, disable default features:

[dependencies]
comfyg = { version = "0.1.0", default-features = false }

Note: no_std mode requires a global allocator to be configured in your crate.

Basic example

use comfyg::Config;
use comfyg::types::Types;
use std::{fs::File, io::Read};

fn main() {
    let mut f = File::open("config.txt").unwrap();
    let mut data = vec![];
    f.read_to_end(&mut data).unwrap();

    let typedefs = std::collections::HashMap::from([
        ("nval",     Types::Bool),
        ("v",        Types::Number),
        ("bg_color", Types::Color),
        ("title",    Types::String),
    ]);

    let mut c = Config::new();
    c.load_file(&data);
    c.load_types(&typedefs);

    let val = c.get("bg_color").unwrap();
    println!("{:?}", *val);
}

Parsing is lazy — it happens on the first call to get(). Subsequent calls hit the cache. Calling load_file or load_types invalidates the cache and forces a re-parse on the next get().


License

MIT