/* ************************************************************************** * Copyright (C) 2023 INAF * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License * or (at your option) any later version. This program is distributed * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. * * Authors: * * <>Valerio Pastore INAF-OAS Bologna valerio.pastore@inaf.it **************************************************************************** */ #pragma once #include <Base_Packet.h> #include <fstream> #include <nlohmann/json.hpp> using namespace nlohmann; namespace inaf::oasbo::Packets { /** * @brief Represents a JSON packet structure for ASTRI DAQ. * * This class extends the BasePacketStructure class and provides functionality * to convert JSON data into a tuple vector and read the structure from a source. * The compatible json files are in config folder. */ class PacketStructureJson: public inaf::oasbo::Packets::BasePacketStructure { protected: /** * @brief Converts JSON data into a tuple vector. * * @param data The JSON data to convert. * @param count The count of tuples in the vector. * @return An optional structure representing the tuple vector. */ static std::optional<Structure> convertToTupleVector(const ordered_json &data, uint &count); /** * @brief Reads the packet structure from a source. * * @param source The source from which to read the structure. * @return The structure read from the source. */ static Structure readStructureFromSource(std::string source); public: /** * @brief Constructs a PacketStructureJson object with the specified source. * * @param source The source from which to read the structure. */ PacketStructureJson(std::string source) : BasePacketStructure(source, &readStructureFromSource) { } /** * @brief Constructs a PacketStructureJson object from another BasePacketStructure object. * * @param other The BasePacketStructure object to copy from. */ PacketStructureJson(const BasePacketStructure &other) : BasePacketStructure(other) { } }; }