
.. _program_listing_file_Src_config_loader.ixx:

Program Listing for File config_loader.ixx
==========================================

|exhale_lsh| :ref:`Return to documentation for file <file_Src_config_loader.ixx>` (``Src/config_loader.ixx``)

.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS

.. code-block:: cpp

   module;
   
   #include "kataglyphis_export.h"
   #include <cstdint>
   #include <expected>
   #include <filesystem>
   #include <string>
   #include <vector>
   
   export module kataglyphis.config_loader;
   
   export namespace kataglyphis::config {
   
   enum class ConfigError { FileNotFound, ParseError, MissingField, InvalidValue };
   
   struct VideoConfig
   {
       std::uint32_t default_width{ 1280 };
       std::uint32_t default_height{ 720 };
       std::uint32_t default_framerate{ 30 };
       std::uint32_t default_bitrate_kbps{ 2000 };
   };
   
   struct TextureConfig
   {
       std::uint32_t width{ 640 };
       std::uint32_t height{ 480 };
   };
   
   struct AndroidConfig
   {
       std::uint32_t width{ 320 };
       std::uint32_t height{ 240 };
       std::uint32_t fps{ 15 };
   };
   
   struct WebRTCConfig
   {
       std::string signaling_server_url{ "ws://127.0.0.1:8443" };
       std::uint32_t reconnection_timeout_ms{ 5000 };
       std::vector<std::string> stun_servers;
       std::vector<std::string> turn_servers;
       VideoConfig video;
       TextureConfig texture;
       AndroidConfig android;
   };
   
   [[nodiscard]] KATAGLYPHIS_CPP_API auto load_webrtc_config(const std::filesystem::path &config_path)
     -> std::expected<WebRTCConfig, ConfigError>;
   
   [[nodiscard]] KATAGLYPHIS_CPP_API auto parse_webrtc_config(const std::string &json_content)
     -> std::expected<WebRTCConfig, ConfigError>;
   
   [[nodiscard]] KATAGLYPHIS_CPP_API auto get_default_webrtc_config() -> WebRTCConfig;
   
   }// namespace kataglyphis::config
