Niek-HM/zig-config
Simple zig library that handle's .env / .ini files
A simple .env
and .ini
config loader for Zig.
Version: 0.1.1
.env
and .ini
config strings or files.env
or .ini
const Config = @import("zig-config").Config;
const std = @import("std");
pub fn main() !void {
const allocator = std.heap.page_allocator;
var cfg = try Config.parseEnv(
\\API_KEY=secret
\\PORT=3000
, allocator);
defer cfg.deinit();
const port = cfg.getInt("PORT") orelse 8080;
std.debug.print("Port: {}
", .{port});
}
Load from .env buffer
var cfg = try Config.parseEnv("FOO=bar\nDEBUG=true\n", allocator);
Load from .ini buffer
var cfg = try Config.parseIni("[server]\nport=8080\n", allocator);
Get string
if (cfg.get("FOO")) |val| std.debug.print("{s}\n", .{val});
Get int
if (cfg.getInt("PORT")) |port| {
std.debug.print("Port: {d}\n", .{port});
}
Get float
if (cfg.getFloat("THRESHOLD")) |t| {
std.debug.print("Threshold: {e}\n", .{t});
}
Get bool
if (cfg.getBool("DEBUG")) |flag| {
std.debug.print("Debug mode: {s}\n", .{flag});
}
List all keys
const keys = try cfg.keys(allocator);
defer allocator.free(keys);
for (keys) |k| std.debug.print("Key: {s}\n", .{k});
Get section
var section = try cfg.getSection("server", allocator);
defer section.deinit();
if (section.getInt("port")) |p| {
std.debug.print("Server port: {d}\n", .{p});
}
Save as .env file
try cfg.writeEnvFile("output.env");
Save as .ini file
try cfg.writeIniFile("output.ini", allocator);
Merge configs
try cfg1.merge(&cfg2); // values in cfg2 override cfg1