mirage-config/README.md
2022-10-09 01:03:26 +03:00

2.8 KiB

Mirage Config

Version 0.0.0
Copyright 2022 Mike Bierlee
Licensed under the terms of the MIT license - See LICENSE.txt

Toolkit for loading and using application configuration from various formats.

Features:

  • Load from various file formats such as JSON and Java properties (see Formats);
  • Environment variable substitution;
  • Internal configuration substitution (Value in config replaced by other path in config);
  • Parse configuration from string or JSONValue instead of from disk.

TODO: add tutorial on:

  • Config loading
  • Config parsing
  • Config manip
  • Env and config var substitution -- Escaping

Getting started

DUB Dependency

See the DUB project page for instructions on how to include Mirage Config into your project.

Quickstart

import std.stdio : writeln;
import mirage : loadConfig, parseJavaProperties;

void main() {
    // Load configuration from file (see examples/quickstart/config.json):
    auto config = loadConfig("config.json");
    writeln(config.get("application.name"));
    writeln(config.get!long("application.version"));

    // Or parse directly from string:
    auto properties = parseJavaProperties("
        databaseDriver = Postgres
        database.host = localhost
        database.port = 5432
    ");

    auto databaseConfig = properties.getConfig("database");

    writeln(properties.get("databaseDriver"));
    writeln(databaseConfig.get("host"));
    writeln(databaseConfig.get("port"));
}

More formats are available (see Formats).
For more details and examples, see the examples directory.

Formats

The following file formats are currently supported:

Format Extension Import* Loader Parser Factory
any below any below mirage loadConfig** (N/A)
JSON .json mirage.json loadJsonConfig parseJsonConfig*** JsonConfigFactory
Java .properties mirage.java loadJavaProperties parseJavaProperties JavaPropertiesFactory

* Any loader or parser can be imported from the mirage package since they are all publicly imported.
** Loads files based on their extension. If the file does not use one of the extensions in the table, you must use a specific loader.
*** Besides parsing strings like the other formats, it also accepts a JSONValue.

History

For a full overview of changes, see CHANGES.md