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-cppuntuk 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:
CampAPIClass utama
ConfigFormat
Digunakan untuk memilih format file:
CampAPI::ConfigFormat::Auto
CampAPI::ConfigFormat::Json
CampAPI::ConfigFormat::Yaml
CampAPI::ConfigFormat::IniConfigError
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
#include "Config.hpp"
CampAPI::Config cfg = CampAPI::Config::loadFromFile("config.json");Baca value
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
std::string token = cfg.require<std::string>("auth.token");Kalau key tidak ada, require() akan melempar CampAPI::ConfigError.
Tulis value
cfg.set("server.port", 25565);
cfg.set("server.host", "127.0.0.1");
cfg.set("debug", true);Hapus value
cfg.remove("debug");Merge patch JSON
cfg.merge({
{"server", {
{"port", 3000}
}}
});Simpan file
cfg.saveToFile("config.yml");Contoh JSON
{
"server": {
"host": "0.0.0.0",
"port": 19132
},
"debug": true
}Contoh YAML
server:
host: 0.0.0.0
port: 19132
debug: trueContoh INI
[server]
host="0.0.0.0"
port=19132
debug=trueCara kerja path
API ini memakai path dengan tanda titik:
server.portserver.hostdatabase.user
Contoh:
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.