Git Product home page Git Product logo

bulat-ziganshin / easyprotobuf Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 101 KB

Tiny single-header C++ ProtoBuf library with both a simple, natural API and generator of elegant bindings from .proto files

License: The Unlicense

C++ 97.31% CMake 1.92% Lua 0.77%
c-plus-plus cross-platform header-only serialization-library protobuf-library marshalling protocol-buffers-library protobuf protocol-buffers single-header-library

easyprotobuf's Introduction

EasyProtoBuf is a single-header C++11 ProtoBuf library that is

  • easy to learn - all field types are (de)serialized with the uniform get_{FIELDTYPE} and put_{FIELDTYPE} calls
  • easy to use - you need to write only one line of code to (de)serialize each field
  • easy to grok and hack - the entire library is only 666 LOC

Sorry, I fooled you... It's even easier!

Codegen translates .proto files into plain C++ structures and generates encode/decode functions (de)serializing these structures into ProtoBuf format. So, if you know how to use C++ structs, you just learned how to use EasyProtoBuf. Scrap the docs, and have a nice beer! The rest is written for water lovers.

Overview

Library features:

  • encoding & decoding, i.e. get/put methods for all ProtoBuf field types
  • string/bytes fields can be stored in any C++ type convertible from/to std::string_view (or easypb::string_view)
  • repeated fields can be stored in any C++ container implementing push_back() and begin()/end()
  • map fields can be stored in any C++ container similar enough to std::map
  • not implemented: group wire format
  • protozero is a production-grade library with a similar API

Codegen features:

  • generates C++ structure, encoder and decoder for each message type
  • the generated decoder checks the presence of required fields in the decoded message
  • cmdline options to tailor the generated code
  • planned:
    • support of enum/oneof/map fields and nested message type definitions (and thus dogfooding Codegen)
    • protoc plugin
    • validation of enum, integer and bool values by the generated code
    • per-field C++ type specification

Files:

  • easypb.hpp - the entire library
  • Codegen - generates C++ structures and (de)coders from .pbs (compiled .proto) files
  • Tutorial - learn how to use the library
  • Decoder - schema-less decoder of arbitrary ProtoBuf messages

Portability:

  • we target compatibility with any C++11 compiler providing int32_t and int64_t types, in particular gcc 4.7+ and clang 3.1+
  • now we support only little-endian and big-endian CPUs with runtime detection, but it can be improved to support other CPUs and compile-time detection
  • in principle, the library can be ported to C++98 with 3rd-party replacement of <cstdint>

CI: while the final goal is to support any C++11 compiler, so far we tested only:

  • Linux: gcc 4.7..14 and clang 3.5, 3.8, 7..18 on Ubuntu (x64); plus default gcc compilers on Ubuntu LTS 14.04..24.04, Debian 10..12 and CentOS/RockyLinux 7..9
  • Mac: clang 13..15 on Mac OS 11..13 (x64) and Mac OS 14 (ARM64), plus gcc 13 on MacOS 14
  • Windows: only MSVC in x64 and x86 modes (the latter is the only 32-bit build in our tests)
  • C++11 and C++17 modes for modern compilers (MSVC in C++14/17 modes)
  • big-endian cpus: the support is implemented, but has not been tested so far
  • planned: copy the CI scripts from protozero and xxHash which tests a lot of older compilers and non-x86 platforms

Implemented so far:

  • 100% of the library
  • 66% of the Codegen
  • 50% of the documentation (need exhaustive docs on the API and Codegen)
  • 25% of CI (ideally it should test every C++11 compiler on the Earth with every combination of compiler flags)
  • 0% of the tests (the grand plan is to copy the exhaustive protozero test suite)

Motivating example

From this ProtoBuf message definition...

message Person
{
    required string name    = 1 [default = "AnnA"];
    optional double weight  = 2;
    repeated int32  numbers = 3;
}

... Codegen generates the following C++ structure...

struct Person
{
    std::string name = "AnnA";
    double weight = 0;
    std::vector<int32_t> numbers;
...
};

... that follows the official ProtoBuf guidelines on the ProtoBuf->C++ type mapping, while enclosing repeated types into std::vector.

And on top of that, Codegen generates two functions that encode/decode Person in the ProtoBuf wire format:

// Encode Person into a string buffer
std::string protobuf_msg = easypb::encode(person);

// Decode Person from a string buffer
Person person2 = easypb::decode<Person>(protobuf_msg);

And that's all you need to know to start using the library. Check technical details in Tutorial.

Using the API

Even if you are going to implement your own encoder or decoder, we recommend using Codegen to get a blueprint for your code. For Person (see above), the generated code is:

void Person::encode(easypb::Encoder &pb) const
{
    pb.put_string(1, name);
    pb.put_double(2, weight);
    pb.put_repeated_int32(3, ids);
}

void Person::decode(easypb::Decoder pb)
{
    while(pb.get_next_field())
    {
        switch(pb.field_num)
        {
            case 1: pb.get_string(&name); break;
            case 2: pb.get_double(&weight); break;
            case 3: pb.get_repeated_int32(&ids); break;
            default: pb.skip_field();
        }
    }
}

So, the API consists of the following class methods (where FTYPE is the Protobuf type of the field, e.g. 'fixed32' or 'message'):

  • get_FTYPE reads the value of the non-repeated field
  • get_repeated_FTYPE reads the value of the repeated field
  • put_FTYPE writes the value of the non-repeated field
  • put_repeated_FTYPE writes the value of the unpacked repeated field
  • put_packed_FTYPE writes the value of the packed repeated field

The field number is the first parameter in put_* calls, and placed in the case label before get_* calls.

You can use the returned value of get_FTYPE method instead of passing the variable address, e.g. weight = pb.get_double().

get_FTYPE(&var) accepts an optional second parameter - a pointer to a bool variable, e.g. pb.get_string(&name, &has_name). This extra variable is set to true after the modification of var, allowing the program to check which fields were actually present in the decoded message. This form of get_FTYPE is employed in the code generated by Codegen, both for required and optional fields.

Documentation

EasyProtoBuf is a single-header library. In order to use it, include easypb.hpp.

All exceptions explicitly thrown by the library are derived from easypb::exception. It may also throw std::bad_alloc due to buffer management.

Encoding API

Start encoding with the creation of the Encoder object:

    easypb::Encoder pb;

Then proceed with encoding all present fields of the message:

    pb.put_string(1, name);
    pb.put_double(2, weight);
    pb.put_repeated_int32(3, ids);

Finally, retrieve the encoded message from the Encoder object:

    std::string protobuf_msg = pb.result();

This call clears the contents of the Encoder, so it can be reused to encode more messages.

The first parameter of any put_* call is the field number, and the second parameter is the value to encode.

There are several groups of put_* methods:

  • put_FTYPE, e.g. put_string, encodes a single value.
  • put_repeated_FTYPE, encodes multiple values in one call. The second parameter should be an iterable container.
  • put_packed_FTYPE, is similar to put_repeated_FTYPE, but encodes data in the packed format.
  • put_map_FTYPE1_FTYPE2, e.g. put_map_string_int32 serializes the map type map<string, int32>. The second parameter should be a compatible C++ map container, e.g. std::map<std::string, int32_t>.

FTYPE here should be replaced by the ProtoBuf field type of the corresponding message field, e.g. int32, bytes and so on, except that for any message type we use the fixed string message.

Decoding API

The Decoder keeps only the raw pointer to the buffer passed to the constructor. Thus, the buffer should neither be freed nor moved until decoding is complete.

Code generator

The code generator is described in the separate documentation.

Boring details

Despite its simplicity, the library is quite fast, thanks to the use of std::string_view (e.g. avoiding large buffer copies) and efficient read_varint/write_varint implementation.

On pre-C++17 compilers, the library uses its own implementation of string_view to ensure good performance, or a user can supply his own type as EASYPB_STRING_VIEW preprocessor macro, e.g. define it to std::string.

Sub-messages and packed repeated fields always use 5-byte length prefix (it can make encoded messages a bit longer than with other Protobuf libraries).

Compared to the official ProtoBuf library, EasyProtoBuf allows more flexibility in modifying the field type without losing the decoding compatibility. You can make any changes to the field type as long as it stays inside the same "type domain":

  • FP domain - only float and double
  • zigzag domain - includes sint32 and sint64
  • bytearray domain - strings, bytes and sub-messages
  • integrals domain - all remaining scalar types (enum, bool, int*, uint*)
  • aside from that, fixed-width integral fields are compatible with both integral and zigzag domain
  • allows to switch between I32, I64 and VARINT representations for the same field as far as field type kept inside the same domain
  • note that when changing the field type, values will be decoded correctly only if they fit into the range of both old and new field types - for integral types; while precision will be truncated to 32 bits - for FP types

Motivation

It starts with the story of my FreeArc archiver:

  • the first FreeArc version was implemented in Haskell, which is a very high-level language
  • the second version was reimplemented in C++, both to increase performance and to increase the potential contributors' audience
  • then, I realized that 80% of the archiver code (e.g. cmdline parsing) doesn't need C++ efficiency and rewrote this part in Lua to simplify the code and further increase the potential contributors' audience (the popularity of Haskell, C++ and Lua among non-professional programmers is at the proportion of 1:10:100)
  • and, finally, I thought that the C++ part could be considered as a low-level core archiver library (AKA backend) while the scripting part is a client implementing concrete frontend (cmdline, UI) on the top of the core. The backend API provides only a few functions (e.g. compress and decompress) with LOTS of parameters.

And the best way to pass a lot of parameters to a C++ function is a plain C struct. Using a serialization library to pass such a struct between languages greatly simplifies adding bindings to the core API for new languages, such as Python, JavaScript, and so on. So I decided to provide the backend API as a few functions accepting serialized data structures for all their parameters.

At this moment, I started to research various popular serialization libraries and finally chose the ProtoBuf format:

  • FlatBuffers doesn't suppose deserialization, while I prefer to work with plain C++ structures
  • MessagePack format is more self-describing (schema-less) than ProtoBuf, making it less efficient for schema-based serialization
  • ProtoBuf format is the simplest one among all popular libs, although sometimes it's TOO simple (e.g. maps are emulated via repeated pairs)
  • Given its simplicity, it's no surprise that ProtoBuf is the most popular serialization format around, with bindings implemented for more languages. And even if some exotic language misses a binding, it would be easier to implement it for ProtoBuf than for any other serialization format.

So, I started to look around, but the tiniest C++ ProtoBuf library I found was still a whopping 4 KLOC (while it neither supports maps nor provides a bindings generator). This made me crazy - the entire ProtoBuf format is just 5 field types, what do you do in those kilolines of code?

You guessed it right - I decided to write my own ProtoBuf library (with maps and codegen, you know). The first Decoder version was about 100 LOC and today the entire library is still only 666 LOC, encoding and decoding all ProtoBuf types including maps. Nevertheless, the library I rejected eventually provided many insights, from API to internal organization, so it may be called the father of EasyProtoBuf.

easyprotobuf's People

Contributors

bulat-ziganshin avatar

Stargazers

 avatar

Watchers

 avatar  avatar

easyprotobuf's Issues

Unexpected end of buffer in varint

I created a simple testing solution.

My proto file looks like this:

syntax = "proto2";

message SimpleMessage {
  required int32 msg_id = 1;
  optional string msg_string = 2;
}

message ComplexMessage {
  required int32 complex_msg_id = 1;
  repeated SimpleMessage messages = 2;
}

The codegen processes it without any problem and eventually translated the repeated SimpleMessage into std::vector<SimpleMessage> as you would expect.

My code sends and receives through a TCP socket.

I can encode/decode SimpleMessage object without any issue. But in trying to decode a ComplexMessage I run into the error:
Unexpected end of buffer in varint
which seems to be related to an EOF of sorts.

I will try to simplify my test to take out the socket code so I can share a simpler test.
But in the meanwhile I wonder if there is any size limitation that my vector might exceed.

Thanks again.

Building Codegen on Windows

First, thanks for the excellent work.

As you stated in the README:
"Windows: tested only CL in x64 and x86 modes (the latter is the only 32-bit build that we tested so far)"
I don't know what "CL" stands for (sorry), but you are correctly warning about building in Windows.

It looks like the only project affected is the Code Generator utility.
This is not an issue for me as everything builds and works in my WSL, so I can generate everything I need.

But I figured I'd document this in case anyone else tries, and maybe as an enhancement request with low priority.

This is my build output for reference.

build output (long)
[main] Building folder: EasyProtoBuf 
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/dumas/Documents/git/EasyProtoBuf/build --config Debug --target ALL_BUILD -j 10 --
[build] MSBuild version 17.9.5+33de0b227 for .NET Framework
[build] 
[build]   Checking Build System
[build]   Building Custom Rule C:/Users/dumas/Documents/git/EasyProtoBuf/CMakeLists.txt
[build]   Building Custom Rule C:/Users/dumas/Documents/git/EasyProtoBuf/CMakeLists.txt
[build]   decoder.cpp
[build]   main.cpp
[build]   Building Custom Rule C:/Users/dumas/Documents/git/EasyProtoBuf/CMakeLists.txt
[build]   main.cpp
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(10,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(10,22): error C3646: 'name': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(10,26): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(21,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(21,22): error C3646: 'name': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(21,26): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(34,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(34,22): error C3646: 'name': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(34,26): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(83,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(83,22): error C3646: 'name': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(83,26): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(87,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(87,22): error C3646: 'type_name': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(87,31): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(88,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(88,22): error C3646: 'default_value': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(88,35): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(116,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(116,22): error C3646: 'name': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(116,26): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(133,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(133,22): error C3646: 'name': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(133,26): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(134,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(134,22): error C3646: 'package': unknown override specifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(134,29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(160,36): error C2065: 'name': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(173,36): error C2065: 'name': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(187,36): error C2065: 'name': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(214,36): error C2065: 'name': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(218,36): error C2065: 'type_name': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(219,36): error C2065: 'default_value': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(250,36): error C2065: 'name': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(272,36): error C2065: 'name': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(273,36): error C2065: 'package': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(5,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(5,10): error C2065: 'string_view': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(5,22): error C2146: syntax error: missing ')' before identifier 'str' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(6,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(7,10): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(8,3): error C2143: syntax error: missing ';' before '{' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(8,3): error C2447: '{': missing function header (old-style formal list?) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(26,27): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(26,27): error C2065: 'string_view': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(26,39): error C2146: syntax error: missing ')' before identifier 'format_str' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(27,1): error C2143: syntax error: missing ';' before '{' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\utils.cpp(27,1): error C2447: '{': missing function header (old-style formal list?) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(19,1): error C2332: 'struct': missing tag name [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(19,1): error C3306: '<unnamed-tag>': unnamed class template is not allowed [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(30,3): error C2143: syntax error: missing ';' before 'identifier' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(119,41): error C2065: 'option': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(138,13): error C2065: 'option': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(139,13): error C2065: 'option': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(145,6): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(145,18): error C2146: syntax error: missing ';' before identifier 'protobuf_type_as_str' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(146,1): error C2143: syntax error: missing ';' before '{' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(146,1): error C2447: '{': missing function header (old-style formal list?) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(174,41): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(174,41): error C2065: 'string_view': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(174,53): error C2146: syntax error: missing ')' before identifier 'package_name_prefix' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(174,79): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(174,117): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(175,1): error C2143: syntax error: missing ';' before '{' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(175,1): error C2447: '{': missing function header (old-style formal list?) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(199,39): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(199,39): error C2065: 'string_view': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(199,51): error C2146: syntax error: missing ')' before identifier 'package_name_prefix' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(199,77): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(200,1): error C2143: syntax error: missing ';' before '{' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(200,1): error C2447: '{': missing function header (old-style formal list?) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(239,34): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(239,34): error C2065: 'string_view': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(239,46): error C2146: syntax error: missing ')' before identifier 'package_name_prefix' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(239,72): error C2039: 'string_view': is not a member of 'std' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(25,1):
[build]   see declaration of 'std'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(240,1): error C2143: syntax error: missing ';' before '{' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(240,1): error C2447: '{': missing function header (old-style formal list?) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(254,40): error C2065: 'option': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(258,58): error C2039: 'default_value': is not a member of 'FieldDescriptorProto' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(54,8):
[build]   see declaration of 'FieldDescriptorProto'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(258,16): error C3861: 'myformat': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(280,13): error C3861: 'protobuf_type_as_str': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(282,19): error C2039: 'name': is not a member of 'FieldDescriptorProto' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(54,8):
[build]   see declaration of 'FieldDescriptorProto'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(276,12): error C3861: 'myformat': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(292,13): error C3861: 'protobuf_type_as_str': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(293,19): error C2039: 'name': is not a member of 'FieldDescriptorProto' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(54,8):
[build]   see declaration of 'FieldDescriptorProto'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(295,48): error C2039: 'name': is not a member of 'FieldDescriptorProto' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\descriptor.pb.cpp(54,8):
[build]   see declaration of 'FieldDescriptorProto'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(295,19): error C3861: 'myformat': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(289,12): error C3861: 'myformat': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(306,15): error C2678: binary '+': no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(1954,59):
[build]   could be 'std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept' [found using argument-dependent lookup]
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   	C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(306,15):
[build]   	'std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept': cannot convert argument 1 from 'const std::string' to 'const __int64'
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   		C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(306,15):
[build]   		No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(2131,53):
[build]   or       'std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept' [found using argument-dependent lookup]
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   	C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(306,15):
[build]   	'std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept': cannot convert argument 1 from 'const std::string' to 'const __int64'
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   		C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(306,15):
[build]   		No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xutility(1792,50):
[build]   or       'std::reverse_iterator<_BidIt> std::operator +(reverse_iterator<_BidIt>::difference_type,const std::reverse_iterator<_BidIt> &) noexcept(<expr>)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xutility(4311,5):
[build]   or       'std::move_iterator<_Iter> std::operator +(move_iterator<_Iter>::difference_type,const std::move_iterator<_Iter> &) noexcept(<expr>)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4931,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4943,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem *const ,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4956,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4967,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *const )'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4980,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4991,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4997,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5003,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5016,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem *const ,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5022,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5028,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const _Elem *const )'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5034,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const _Elem)'
[build]   C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(306,15):
[build]   while trying to match the argument list '(const std::string, std::string)'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(309,27): error C2988: unrecognizable template declaration/definition [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(309,27): error C2143: syntax error: missing ';' before ':' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(309,46): error C2988: unrecognizable template declaration/definition [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(309,46): error C2143: syntax error: missing ';' before ')' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(312,48): error C2065: 'message_type': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(312,47): error C2678: binary '+': no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion) [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(1954,59):
[build]   could be 'std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept' [found using argument-dependent lookup]
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   	C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(312,47):
[build]   	'std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept': cannot convert argument 1 from 'std::string' to 'const __int64'
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(2131,53):
[build]   or       'std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept' [found using argument-dependent lookup]
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   	C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(312,47):
[build]   	'std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>> std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>::operator +(const __int64,std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>) noexcept': cannot convert argument 1 from 'std::string' to 'const __int64'
[build]           with
[build]           [
[build]               _Elem=char
[build]           ]
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xutility(1792,50):
[build]   or       'std::reverse_iterator<_BidIt> std::operator +(reverse_iterator<_BidIt>::difference_type,const std::reverse_iterator<_BidIt> &) noexcept(<expr>)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xutility(4311,5):
[build]   or       'std::move_iterator<_Iter> std::operator +(move_iterator<_Iter>::difference_type,const std::move_iterator<_Iter> &) noexcept(<expr>)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4931,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4943,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem *const ,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4956,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4967,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *const )'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4980,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4991,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(4997,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const std::basic_string<_Elem,_Traits,_Alloc> &)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5003,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5016,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem *const ,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5022,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const _Elem,std::basic_string<_Elem,_Traits,_Alloc> &&)'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5028,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const _Elem *const )'
[build]   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\xstring(5034,62):
[build]   or       'std::basic_string<_Elem,_Traits,_Alloc> std::operator +(std::basic_string<_Elem,_Traits,_Alloc> &&,const _Elem)'
[build]   C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(312,47):
[build]   while trying to match the argument list '(std::string, const std::string)'
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(314,26): error C2065: 'message_type': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(314,24): error C2988: unrecognizable template declaration/definition [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(314,24): error C2143: syntax error: missing ';' before ':' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(314,44): error C2988: unrecognizable template declaration/definition [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(314,44): error C2143: syntax error: missing ';' before ')' [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(317,90): error C2065: 'field': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(317,32): error C3861: 'cpp_type_as_str': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(318,13): error C2065: 'field_defs': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(318,67): error C2065: 'field': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(318,97): error C2065: 'field': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(318,27): error C3861: 'myformat': identifier not found [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(320,34): error C2065: 'field': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(321,17): error C2065: 'has_field_defs': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(321,74): error C2065: 'field': undeclared identifier [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build] C:\Users\dumas\Documents\git\EasyProtoBuf\codegen\codegen.cpp(321,74): error C1003: error count exceeds 100; stopping compilation [C:\Users\dumas\Documents\git\EasyProtoBuf\build\codegen.vcxproj]
[build]   (compiling source file '../codegen/main.cpp')
[build]   
[build]   decoder.vcxproj -> C:\Users\dumas\Documents\git\EasyProtoBuf\build\Debug\decoder.exe
[build]   'pwsh.exe' is not recognized as an internal or external command,
[build]   operable program or batch file.
[build]   tutorial.vcxproj -> C:\Users\dumas\Documents\git\EasyProtoBuf\build\Debug\tutorial.exe
[build]   'pwsh.exe' is not recognized as an internal or external command,
[build]   operable program or batch file.
[proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/dumas/Documents/git/EasyProtoBuf/build --config Debug --target ALL_BUILD -j 10 -- exited with code: 1
[driver] Build completed: 00:00:04.617
[build] Build finished with exit code 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.