MCPcopy Create free account
hub / github.com/chronoxor/FastBinaryEncoding / GenerateEnum

Method GenerateEnum

source/generator_go.cpp:4905–5086  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4903}
4904
4905void GeneratorGo::GenerateEnum(const std::shared_ptr<Package>& p, const std::shared_ptr<EnumType>& e, const CppCommon::Path& path)
4906{
4907 std::string enum_name = ConvertToUpper(*e->name);
4908
4909 // Generate the output file
4910 CppCommon::Path output = path / (enum_name + ".go");
4911 WriteBegin();
4912
4913 // Generate header
4914 GenerateHeader(CppCommon::Path(_input).filename().string());
4915
4916 // Generate package
4917 WriteLine();
4918 WriteLineIndent("package " + *p->name);
4919
4920 // Generate imports
4921 WriteLine();
4922 GenerateImports(p);
4923
4924 std::string enum_type = (e->base && !e->base->empty()) ? *e->base : "int32";
4925
4926 // Generate enum key
4927 WriteLine();
4928 WriteLineIndent("// " + enum_name + " enum key");
4929 WriteLineIndent("type " + enum_name + "Key " + ConvertEnumType(enum_type));
4930
4931 // Generate enum key String() method
4932 WriteLine();
4933 WriteLineIndent("// Convert " + enum_name + " enum key to string");
4934 WriteLineIndent("func (k " + enum_name + "Key) String() string {");
4935 Indent(1);
4936 WriteLineIndent("return " + enum_name + "(k).String()");
4937 Indent(-1);
4938 WriteLineIndent("}");
4939
4940 // Generate enum type
4941 WriteLine();
4942 WriteLineIndent("// " + enum_name + " enum");
4943 WriteLineIndent("type " + enum_name + " " + ConvertEnumType(enum_type));
4944
4945 // Generate enum body
4946 if (e->body)
4947 {
4948 WriteLine();
4949 WriteLineIndent("// " + enum_name + " enum values");
4950 WriteLineIndent("//noinspection GoSnakeCaseUsage");
4951 WriteLineIndent("const (");
4952 Indent(1);
4953
4954 int index = 0;
4955 std::string last = ConvertEnumConstant(enum_name, "int32", "0");
4956 for (const auto& value : e->body->values)
4957 {
4958 WriteIndent(enum_name + "_" + *value->name + " = " + enum_name + "(");
4959 if (value->value)
4960 {
4961 if (value->value->constant && !value->value->constant->empty())
4962 {

Callers

nothing calls this directly

Calls 4

beginMethod · 0.80
endMethod · 0.80
stringMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected