/* * Copyright 2023 jacqueline * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include #include "lua.hpp" #include "lvgl.h" #include "bridge.hpp" #include "service_locator.hpp" namespace lua { class Allocator; auto CallProtected(lua_State*, int nargs, int nresults) -> int; class LuaThread { public: static auto Start(system_fsm::ServiceLocator&, lv_obj_t* lvgl_root = nullptr) -> LuaThread*; ~LuaThread(); auto RunScript(const std::string& path) -> bool; auto bridge() -> Bridge& { return *bridge_; } private: LuaThread(std::unique_ptr&, std::unique_ptr&, lua_State*); std::unique_ptr alloc_; std::unique_ptr bridge_; lua_State* state_; }; } // namespace lua