| #pragma once |
| |
| #include "types.hpp" |
| |
| #include <nlohmann/json.hpp> |
| |
| #include <tuple> |
| |
| namespace vpd |
| { |
| |
| // Backup and restore operation status. |
| enum class BackupAndRestoreStatus : uint8_t |
| { |
| NotStarted, |
| Invoked, |
| Completed |
| }; |
| |
| /** |
| * @brief class to implement backup and restore VPD. |
| * |
| */ |
| |
| class BackupAndRestore |
| { |
| public: |
| // delete functions |
| BackupAndRestore() = delete; |
| BackupAndRestore(const BackupAndRestore&) = delete; |
| BackupAndRestore& operator=(const BackupAndRestore&) = delete; |
| BackupAndRestore(BackupAndRestore&&) = delete; |
| BackupAndRestore& operator=(BackupAndRestore&&) = delete; |
| |
| /** |
| * @brief Constructor. |
| * |
| * @param[in] i_sysCfgJsonObj - System config JSON object. |
| * |
| * @throw std::runtime_error in case constructor failure. |
| */ |
| BackupAndRestore(const nlohmann::json& i_sysCfgJsonObj); |
| |
| /** |
| * @brief Default destructor. |
| */ |
| ~BackupAndRestore() = default; |
| |
| /** |
| * @brief An API to backup and restore VPD. |
| * |
| * Note: This API works on the keywords declared in the backup and restore |
| * config JSON. Restore or backup action could be triggered for each |
| * keyword, based on the keyword's value present in the source and |
| * destination keyword. |
| * |
| * Restore source keyword's value with destination keyword's value, |
| * when source keyword has default value but |
| * destination's keyword has non default value. |
| * |
| * Backup the source keyword value to the destination's keyword's value, |
| * when source keyword has non default value but |
| * destination's keyword has default value. |
| * |
| * @return Tuple of updated source and destination VPD map variant. |
| */ |
| std::tuple<types::VPDMapVariant, types::VPDMapVariant> backupAndRestore(); |
| |
| /** |
| * @brief An API to set backup and restore status. |
| * |
| * @param[in] i_status - Status to set. |
| */ |
| static void setBackupAndRestoreStatus( |
| const BackupAndRestoreStatus& i_status); |
| |
| private: |
| /** |
| * @brief An API to handle backup and restore of IPZ type VPD. |
| * |
| * @param[in,out] io_srcVpdMap - Source VPD map. |
| * @param[in,out] io_dstVpdMap - Destination VPD map. |
| * @param[in] i_srcPath - Source EEPROM file path or inventory path. |
| * @param[in] i_dstPath - Destination EEPROM file path or inventory path. |
| * |
| * @throw std::runtime_error |
| */ |
| void backupAndRestoreIpzVpd( |
| types::IPZVpdMap& io_srcVpdMap, types::IPZVpdMap& io_dstVpdMap, |
| const std::string& i_srcPath, const std::string& i_dstPath); |
| |
| // System JSON config JSON object. |
| nlohmann::json m_sysCfgJsonObj{}; |
| |
| // Backup and restore config JSON object. |
| nlohmann::json m_backupAndRestoreCfgJsonObj{}; |
| |
| // Backup and restore status. |
| static BackupAndRestoreStatus m_backupAndRestoreStatus; |
| }; |
| |
| } // namespace vpd |