Skip to content
Snippets Groups Projects
Packet_Structure_Json.h 1.59 KiB
Newer Older
Valerio Pastore's avatar
Valerio Pastore committed
#pragma once
Valerio Pastore's avatar
Valerio Pastore committed

#include <Base_Packet.h>
#include <fstream>
#include <nlohmann/json.hpp>

astri's avatar
astri committed
using namespace nlohmann;

Valerio Pastore's avatar
Valerio Pastore committed
namespace inaf::oasbo::Packets {

Valerio Pastore's avatar
Valerio Pastore committed
/**
 * @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.
 */
Valerio Pastore's avatar
.  
Valerio Pastore committed
class PacketStructureJson: public inaf::oasbo::Packets::BasePacketStructure {
protected:
Valerio Pastore's avatar
Valerio Pastore committed
	/**
	 * @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,
Valerio Pastore's avatar
.  
Valerio Pastore committed
			uint &count);
Valerio Pastore's avatar
Valerio Pastore committed

	/**
	 * @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);
Valerio Pastore's avatar
Valerio Pastore committed

Valerio Pastore's avatar
Valerio Pastore committed
public:
Valerio Pastore's avatar
Valerio Pastore committed
	/**
	 * @brief Constructs a PacketStructureJson object with the specified source.
	 * 
	 * @param source The source from which to read the structure.
	 */
Valerio Pastore's avatar
.  
Valerio Pastore committed
	PacketStructureJson(std::string source) :
			BasePacketStructure(source, &readStructureFromSource) {
Valerio Pastore's avatar
Valerio Pastore committed
	/**
	 * @brief Constructs a PacketStructureJson object from another BasePacketStructure object.
	 * 
	 * @param other The BasePacketStructure object to copy from.
	 */
Valerio Pastore's avatar
.  
Valerio Pastore committed
	PacketStructureJson(const BasePacketStructure &other) :
			BasePacketStructure(other) {
Valerio Pastore's avatar
Valerio Pastore committed
};
}