#pragma once #include #include #include #include #include #include #include #include #include #include namespace vamp_zero { struct ui_state { vamp_zero::app_state app{}; std::string ap_ssid{}; std::string zero_ip{}; std::uint16_t port{8080}; }; class zero_ui { public: zero_ui(boost::asio::any_io_executor executor, luma::application_config config); auto run() -> std::expected; auto stop() -> void; auto publish(vamp_zero::ui_state state) -> std::expected; auto snapshot() const -> vamp_zero::ui_state; private: auto make_root(vamp_zero::ui_state const& state) -> std::expected, modulus::error>; boost::asio::any_io_executor executor_; luma::application application_; mutable std::mutex mutex_{}; vamp_zero::ui_state state_{}; }; auto make_ui_state(vamp_zero::config const& config, vamp_zero::app_state app) -> vamp_zero::ui_state; }