mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-24 11:11:02 -07:00
91 lines
2.4 KiB
C++
91 lines
2.4 KiB
C++
#ifndef PROTO_H
|
|
#define PROTO_H
|
|
|
|
#include <google/protobuf/message.h>
|
|
#include "lib/config/common.pb.h"
|
|
#include "lib/config/config.pb.h"
|
|
|
|
class ProtoPathNotFoundException : public ErrorException
|
|
{
|
|
public:
|
|
ProtoPathNotFoundException(const std::string& message):
|
|
ErrorException(message)
|
|
{
|
|
}
|
|
};
|
|
|
|
class ProtoField
|
|
{
|
|
public:
|
|
ProtoField(const std::string& path,
|
|
google::protobuf::Message* message,
|
|
const google::protobuf::FieldDescriptor* field,
|
|
int index = -1):
|
|
_path(path),
|
|
_message(message),
|
|
_field(field),
|
|
_index(index)
|
|
{
|
|
}
|
|
|
|
void set(const std::string& value);
|
|
std::string get() const;
|
|
google::protobuf::Message* getMessage() const;
|
|
std::string getBytes() const;
|
|
|
|
bool operator==(const ProtoField& other) const = default;
|
|
std::strong_ordering operator<=>(const ProtoField& other) const = default;
|
|
|
|
const std::string& path() const
|
|
{
|
|
return _path;
|
|
}
|
|
|
|
const google::protobuf::FieldDescriptor* descriptor() const
|
|
{
|
|
return _field;
|
|
}
|
|
|
|
private:
|
|
std::string _path;
|
|
google::protobuf::Message* _message;
|
|
const google::protobuf::FieldDescriptor* _field;
|
|
int _index;
|
|
};
|
|
|
|
extern ProtoField makeProtoPath(
|
|
google::protobuf::Message* message, const std::string& path);
|
|
extern ProtoField findProtoPath(
|
|
google::protobuf::Message* message, const std::string& path);
|
|
extern void setProtoFieldFromString(
|
|
ProtoField& protoField, const std::string& value);
|
|
extern std::string getProtoFieldValue(ProtoField& protoField);
|
|
extern void setProtoByString(google::protobuf::Message* message,
|
|
const std::string& path,
|
|
const std::string& value);
|
|
extern std::string getProtoByString(
|
|
google::protobuf::Message* message, const std::string& path);
|
|
|
|
extern std::set<unsigned> iterate(unsigned start, unsigned count);
|
|
|
|
extern std::map<std::string, const google::protobuf::FieldDescriptor*>
|
|
findAllPossibleProtoFields(const google::protobuf::Descriptor* descriptor);
|
|
|
|
extern std::vector<ProtoField> findAllProtoFields(
|
|
google::protobuf::Message* message);
|
|
|
|
template <class T>
|
|
static inline const T parseProtoBytes(const std::string_view& bytes)
|
|
{
|
|
T proto;
|
|
if (!proto.ParseFromArray(bytes.begin(), bytes.size()))
|
|
error("invalid internal proto data");
|
|
return proto;
|
|
}
|
|
|
|
extern const std::map<std::string, const ConfigProto*> formats;
|
|
|
|
extern ConfigProto& globalConfigProto();
|
|
|
|
#endif
|