#pragma once #include <furi/record.h> /** * @brief Class for opening, casting, holding and closing records * * @tparam TRecordClass record class */ template <typename TRecordClass> class RecordController { public: /** * @brief Construct a new Record Controller object for record with record name * * @param record_name record name */ RecordController(const char* record_name) { name = record_name; value = static_cast<TRecordClass*>(furi_record_open(name)); }; ~RecordController() { furi_record_close(name); } /** * @brief Record getter * * @return TRecordClass* record value */ TRecordClass* get() { return value; } /** * @brief Record getter (by cast) * * @return TRecordClass* record value */ operator TRecordClass*() const { return value; } private: const char* name; TRecordClass* value; };