Skip to content

CampAPI Config API

CampAPI::Config adalah API config yang menyimpan data sebagai nlohmann::json di dalam memori, lalu bisa load dan save ke beberapa format file.

Format yang didukung:

  • JSON
  • YAML (.yml / .yaml)
  • INI (.ini)

Dependensi

Wajib:

  • nlohmann/json

Opsional:

  • yaml-cpp untuk dukungan YAML

Kalau yaml-cpp tidak tersedia, file YAML tetap dikenali di API, tetapi fungsi load/save YAML akan melempar error saat dipakai.

File yang disediakan

  • mcapi/campapi/api/Config.hpp

Namespace

Semua kelas dan enum berada di namespace:

cpp
CampAPI

Class utama

ConfigFormat

Digunakan untuk memilih format file:

cpp
CampAPI::ConfigFormat::Auto
CampAPI::ConfigFormat::Json
CampAPI::ConfigFormat::Yaml
CampAPI::ConfigFormat::Ini

ConfigError

Exception untuk error konfigurasi, misalnya:

  • file tidak bisa dibuka
  • format tidak dikenali
  • key tidak ditemukan
  • YAML support belum terpasang

Config

Class utama untuk membaca, menulis, dan mengakses config.

Contoh penggunaan

Load file

cpp
#include "Config.hpp"

CampAPI::Config cfg = CampAPI::Config::loadFromFile("config.json");

Baca value

cpp
int port = cfg.get<int>("server.port", 19132);
std::string host = cfg.get<std::string>("server.host", "0.0.0.0");
bool debug = cfg.get<bool>("debug", false);

Wajib ada

cpp
std::string token = cfg.require<std::string>("auth.token");

Kalau key tidak ada, require() akan melempar CampAPI::ConfigError.

Tulis value

cpp
cfg.set("server.port", 25565);
cfg.set("server.host", "127.0.0.1");
cfg.set("debug", true);

Hapus value

cpp
cfg.remove("debug");

Merge patch JSON

cpp
cfg.merge({
  {"server", {
    {"port", 3000}
  }}
});

Simpan file

cpp
cfg.saveToFile("config.yml");

Contoh JSON

json
{
  "server": {
    "host": "0.0.0.0",
    "port": 19132
  },
  "debug": true
}

Contoh YAML

yml
server:
  host: 0.0.0.0
  port: 19132
debug: true

Contoh INI

ini
[server]
host="0.0.0.0"
port=19132

debug=true

Cara kerja path

API ini memakai path dengan tanda titik:

  • server.port
  • server.host
  • database.user

Contoh:

cpp
cfg.set("database.user", "root");
cfg.set("database.pass", "secret");

Catatan format

JSON

Paling aman untuk struktur kompleks, array besar, dan nested object.

YAML

Cocok untuk config yang tetap rapi dan mudah dibaca manusia.

INI

Cocok untuk config sederhana. Section nested disimpan lewat nama section bertingkat.

Catatan penting

  • Semua data tetap diolah sebagai nlohmann::json.
  • YAML butuh yaml-cpp.
  • INI di sini didukung dengan subset sederhana, cocok untuk config umum.
  • Root INI harus object saat disimpan.