#pragma once #include #include #include #include #include #include // Declaraciones de estructuras namespace proto { struct FieldComment { size_t offset; uint32_t xor_const; }; struct Field { std::string kind; std::string name; uint32_t number; std::optional comment; }; struct Oneof { std::string name; std::vector fields; }; struct Enum { std::string name; std::vector> variants; }; struct Message { uint16_t cmd_id; std::string name; std::vector fields; std::vector oneofs; }; using ProtoItem = std::variant; struct ProtoFile { std::string syntax; std::vector imports; std::vector items; }; // Declaración de operadores de salida std::ostream& operator<<(std::ostream& os, const FieldComment& c); std::ostream& operator<<(std::ostream& os, const Field& f); std::ostream& operator<<(std::ostream& os, const Oneof& o); std::ostream& operator<<(std::ostream& os, const Enum& e); std::ostream& operator<<(std::ostream& os, const Message& m); std::ostream& operator<<(std::ostream& os, const ProtoItem& item); std::ostream& operator<<(std::ostream& os, const ProtoFile& pf); }