Program Listing for File register_cmd_parser.hpp

Return to documentation for file (register_cmd_parser.hpp)

#ifndef REGISTER_CMD_PARSER_H_
#define REGISTER_CMD_PARSER_H_

#include <cstdint>
#include <string>
#include <vector>

#include "simdjson.h"
#include "felix/felix_client_thread.hpp"

struct Command {
    std::string uuid;
    FelixClientThread::Cmd cmd;
    std::vector<std::string> cmd_args;
};


struct ReqData {
    int status_code{FelixClientThread::OK};
    std::string status_message{"Ok"};
    std::string uuid{""};
    FelixClientThread::Cmd cmd{FelixClientThread::Cmd::UNKNOWN};
    std::string resource_name{""};
    std::string value{""};
};

class RegisterMsgParser
{
    public:
        std::vector<ReqData> parse_commands(const char* msg, size_t len);

        std::vector<ReqData> parse_commands(const std::string& cmd);

        std::string encode_replies(uint64_t fid, const std::vector<ReqData>& cmds);

        std::vector<FelixClientThread::Reply> decode_replies(const std::string & r);

        std::string encode_commands(const std::vector<Command>& cmds);

    private:
        simdjson::dom::parser parser;
        void parse_cmd_args(ReqData& msg, simdjson::dom::array& arr);
};

#endif /* REGISTER_CMD_PARSER_H_ */