/** * @file context.hpp * @brief The core context: configuration, logging, module registry * * @copyright Copyright (c) 2026 SILO GROUP LLC * @author Chris Punches * * Part of the Dark Horse Linux Package Manager (DPM) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include #include "internal/modules.hpp" /** @brief A core context: configuration, logging, and the module registry */ struct dpm_ctx { std::string config_dir; std::string module_path; std::string root; int log_level = DPM_LOG_INFO; bool write_to_log = false; std::string log_file; /* config[module][section][key] = value */ std::map>> config; /* validated modules, keyed by name; loaded at most once per ctx */ std::map> modules; std::string last_error; }; namespace dpmcore { /** * @brief Records a failure reason on the context * * @param ctx The core context; NULL is a no-op * @param msg The failure description */ void set_error(dpm_ctx* ctx, const std::string& msg); /** * @brief Loads all configuration files into the context * * Parses every .conf file in the context's configuration directory * into the context's configuration store. * * @param ctx The core context */ void load_config_dir(dpm_ctx* ctx); } // namespace dpmcore