Skip to content
Snippets Groups Projects
Packet_Structure_Json.h 1.87 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>
astri's avatar
astri committed
#include <fifo_map.hpp>
Valerio Pastore's avatar
Valerio Pastore committed
#include <nlohmann/json.hpp>

astri's avatar
astri committed
using namespace nlohmann;

// A workaround to give to use fifo_map as map, we are just ignoring the 'less' compare
template<class K, class V, class dummy_compare, class A>
using my_workaround_fifo_map = fifo_map<K, V, fifo_map_compare<K>, A>;
using my_json = basic_json<my_workaround_fifo_map>;

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.
	 */
Valerio Pastore's avatar
.  
Valerio Pastore committed
	static std::optional<Structure> convertToTupleVector(const my_json &data,
			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
};
}