Newer
Older
/*
**************************************************************************
* 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
****************************************************************************
*/
#include <Base_Packet.h>
#include <fstream>
#include <nlohmann/json.hpp>
/**
* @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 {
/**
* @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,
/**
* @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);
/**
* @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) {