diff --git a/src/bin/config_parser/src/source_generator/cpp.go b/src/bin/config_parser/src/source_generator/cpp.go
index f309aef..5c61288 100644
--- a/src/bin/config_parser/src/source_generator/cpp.go
+++ b/src/bin/config_parser/src/source_generator/cpp.go
@@ -23,10 +23,10 @@
 	return toUpperSnakeCase(base, "gen") + "_"
 }
 
-func (_ CPP) getCommentPrefix() string { return "//" }
-func (_ CPP) supportsTypeAlias() bool  { return true }
+func (CPP) getCommentPrefix() string { return "//" }
+func (CPP) supportsTypeAlias() bool  { return true }
 
-func (_ CPP) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (CPP) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 	if projectName == "" || customerName == "" {
 		so.writeLine("#pragma once")
 	} else {
@@ -45,7 +45,7 @@
 	so.writeLine("")
 }
 
-func (_ CPP) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (CPP) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 	if projectName != "" && customerName != "" {
 		so.writeLine("")
 		so.writeLine("#endif  // " + getHeaderGuard(projectName, customerName, namespaces))
@@ -57,37 +57,37 @@
 	return "__" + toSnakeCase(name...) + "__"
 }
 
-func (_ CPP) writeEnumBegin(so *sourceOutputter, name ...string) {
+func (CPP) writeEnumBegin(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("namespace %s {", enumNamespace(name...))
 	so.writeLine("enum Enum {")
 }
 
-func (_ CPP) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
+func (CPP) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
 	so.writeLineFmt("  %s = %d,", toPascalCase(name...), value)
 }
 
 // C++ allows duplicate keys in an enum, so nothing needs to be done here.
-func (_ CPP) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {
+func (CPP) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {
 }
 
-func (_ CPP) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
+func (CPP) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
 	so.writeLineFmt("  %s = %s,", toPascalCase(to...), toPascalCase(from...))
 }
 
-func (_ CPP) writeEnumEnd(so *sourceOutputter, name ...string) {
+func (CPP) writeEnumEnd(so *sourceOutputter, name ...string) {
 	so.writeLine("};")
 	so.writeLineFmt("}  // %s", enumNamespace(name...))
 
 	so.writeLineFmt("using %s = %s::Enum;", toPascalCase(name...), enumNamespace(name...))
 }
 
-func (_ CPP) writeEnumExport(so *sourceOutputter, enumName, name []string) {
+func (CPP) writeEnumExport(so *sourceOutputter, enumName, name []string) {
 	enum := toPascalCase(enumName...)
 	variant := toPascalCase(name...)
 	so.writeLineFmt("inline constexpr %s %s_%s = %s::%s;", enum, enum, variant, enum, variant)
 }
 
-func (_ CPP) writeTypeAlias(so *sourceOutputter, from, to []string) {
+func (CPP) writeTypeAlias(so *sourceOutputter, from, to []string) {
 	so.writeLineFmt("using %s = %s;", toPascalCase(to...), toPascalCase(from...))
 }
 
@@ -99,29 +99,29 @@
 	return strings.Join(ns, "::")
 }
 
-func (_ CPP) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {
+func (CPP) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {
 	if len(namespaces) > 0 {
 		so.writeLineFmt("namespace %s {", getNamespaces(namespaces))
 	}
 }
 
-func (_ CPP) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {
+func (CPP) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {
 	if len(namespaces) > 0 {
 		so.writeLineFmt("}  // %s", getNamespaces(namespaces))
 	}
 }
 
-func (_ CPP) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
+func (CPP) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
 	name = append([]string{"k"}, name...)
 	so.writeLineFmt("inline constexpr uint32_t %s = %d;", toCamelCase(name...), value)
 }
 
-func (_ CPP) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
+func (CPP) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
 	name = append([]string{"k"}, name...)
 	so.writeLineFmt("inline constexpr int64_t %s = %d;", toCamelCase(name...), value)
 }
 
-func (_ CPP) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
+func (CPP) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
 	name = append([]string{"k"}, name...)
 	var keys []uint32
 	for k := range value {
@@ -137,20 +137,20 @@
 	so.writeLineFmt("};")
 }
 
-func (_ CPP) writeStringConstant(so *sourceOutputter, value string, name ...string) {
+func (CPP) writeStringConstant(so *sourceOutputter, value string, name ...string) {
 	name = append([]string{"k"}, name...)
 	so.writeLineFmt("inline constexpr char %s[] = \"%s\";", toCamelCase(name...), value)
 }
 
-func (_ CPP) writeStructBegin(so *sourceOutputter, name ...string) {
+func (CPP) writeStructBegin(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("struct %s {", toPascalCase(name...))
 }
 
-func (_ CPP) writeStructField(so *sourceOutputter, name, typeName []string) {
+func (CPP) writeStructField(so *sourceOutputter, name, typeName []string) {
 	so.writeLineFmt("  %s %s;", toPascalCase(typeName...), toSnakeCase(name...))
 }
 
-func (_ CPP) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
+func (CPP) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
 	so.writeLine("")
 	so.writeLineFmt("  [[nodiscard]] std::vector<uint32_t> ToVector() const {")
 	so.writeLine("    return {")
@@ -161,7 +161,7 @@
 	so.writeLine("  }")
 }
 
-func (_ CPP) writeStructEnd(so *sourceOutputter) {
+func (CPP) writeStructEnd(so *sourceOutputter) {
 	so.writeLine("};")
 }
 
diff --git a/src/bin/config_parser/src/source_generator/dart.go b/src/bin/config_parser/src/source_generator/dart.go
index 57686be..f676ff4 100644
--- a/src/bin/config_parser/src/source_generator/dart.go
+++ b/src/bin/config_parser/src/source_generator/dart.go
@@ -11,53 +11,53 @@
 
 type Dart struct{}
 
-func (_ Dart) getCommentPrefix() string { return "//" }
-func (_ Dart) supportsTypeAlias() bool  { return false }
+func (Dart) getCommentPrefix() string { return "//" }
+func (Dart) supportsTypeAlias() bool  { return false }
 
-func (_ Dart) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (Dart) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 }
-func (_ Dart) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (Dart) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 }
 
-func (_ Dart) writeEnumBegin(so *sourceOutputter, name ...string) {
+func (Dart) writeEnumBegin(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("class %s {", toPascalCase(name...))
 }
 
-func (_ Dart) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
+func (Dart) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
 	so.writeLineFmt("  static const int %s = %d;", toPascalCase(name...), value)
 }
 
-func (_ Dart) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {
+func (Dart) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {
 }
 
-func (_ Dart) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
+func (Dart) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
 	so.writeLineFmt("  static const int %s = %s;", toPascalCase(to...), toPascalCase(from...))
 }
 
-func (_ Dart) writeEnumEnd(so *sourceOutputter, name ...string) {
+func (Dart) writeEnumEnd(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("}")
 }
 
-func (_ Dart) writeEnumExport(so *sourceOutputter, enumName, name []string) {
+func (Dart) writeEnumExport(so *sourceOutputter, enumName, name []string) {
 	enum := toPascalCase(enumName...)
 	variant := toPascalCase(name...)
 	so.writeLineFmt("const int %s_%s = %s.%s;", enum, variant, enum, variant)
 }
 
-func (_ Dart) writeTypeAlias(so *sourceOutputter, from, to []string)                                {}
-func (_ Dart) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {}
-func (_ Dart) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string)   {}
+func (Dart) writeTypeAlias(so *sourceOutputter, from, to []string)                                {}
+func (Dart) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {}
+func (Dart) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string)   {}
 
-func (_ Dart) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
+func (Dart) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
 	so.writeComment("ignore: constant_identifier_names")
 	so.writeLineFmt("const int %s = %d;", toCamelCase(name...), value)
 }
 
-func (_ Dart) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
+func (Dart) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
 	so.writeComment("ignore: constant_identifier_names")
 	so.writeLineFmt("const int %s = %d;", toCamelCase(name...), value)
 }
-func (_ Dart) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
+func (Dart) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
 	var keys []uint32
 	for k := range value {
 		keys = append(keys, k)
@@ -73,19 +73,19 @@
 	so.writeLineFmt("};")
 }
 
-func (_ Dart) writeStringConstant(so *sourceOutputter, value string, name ...string) {
+func (Dart) writeStringConstant(so *sourceOutputter, value string, name ...string) {
 	so.writeLineFmt("const String %s = '%s';", toCamelCase(name...), value)
 }
 
-func (_ Dart) writeStructBegin(so *sourceOutputter, name ...string) {
+func (Dart) writeStructBegin(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("class %s {", toPascalCase(name...))
 }
 
-func (_ Dart) writeStructField(so *sourceOutputter, name, typeName []string) {
+func (Dart) writeStructField(so *sourceOutputter, name, typeName []string) {
 	so.writeLineFmt("  int %s = 0;", toSnakeCase(name...))
 }
 
-func (_ Dart) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
+func (Dart) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
 	so.writeLine("")
 	so.writeLine("  List<int> toList() {")
 	so.writeLineFmt("    return [")
@@ -96,7 +96,7 @@
 	so.writeLine("  }")
 }
 
-func (_ Dart) writeStructEnd(so *sourceOutputter) {
+func (Dart) writeStructEnd(so *sourceOutputter) {
 	so.writeLine("}")
 }
 
diff --git a/src/bin/config_parser/src/source_generator/go.go b/src/bin/config_parser/src/source_generator/go.go
index 676a6df..2d46faa 100644
--- a/src/bin/config_parser/src/source_generator/go.go
+++ b/src/bin/config_parser/src/source_generator/go.go
@@ -14,14 +14,14 @@
 	currentEnum string
 }
 
-func (_ *Go) getCommentPrefix() string { return "//" }
-func (_ *Go) supportsTypeAlias() bool  { return true }
+func (*Go) getCommentPrefix() string { return "//" }
+func (*Go) supportsTypeAlias() bool  { return true }
 
 func (g *Go) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 	so.writeLineFmt("package %s", g.packageName)
 }
 
-func (_ *Go) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (*Go) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 }
 
 func (g *Go) writeEnumBegin(so *sourceOutputter, name ...string) {
@@ -35,33 +35,33 @@
 	so.writeLineFmt("  %s_%s = %d", g.currentEnum, toPascalCase(name...), value)
 }
 
-func (_ *Go) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {}
+func (*Go) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {}
 
-func (_ *Go) writeEnumAlias(so *sourceOutputter, name, from, to []string) {}
+func (*Go) writeEnumAlias(so *sourceOutputter, name, from, to []string) {}
 
-func (_ *Go) writeEnumEnd(so *sourceOutputter, name ...string) {
+func (*Go) writeEnumEnd(so *sourceOutputter, name ...string) {
 	so.writeLineFmt(")")
 }
 
-func (_ *Go) writeEnumExport(so *sourceOutputter, enumName, name []string) {}
+func (*Go) writeEnumExport(so *sourceOutputter, enumName, name []string) {}
 
-func (_ *Go) writeTypeAlias(so *sourceOutputter, from, to []string) {
+func (*Go) writeTypeAlias(so *sourceOutputter, from, to []string) {
 	so.writeLineFmt("type %s = %s", toPascalCase(to...), toPascalCase(from...))
 }
 
-func (_ *Go) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {}
+func (*Go) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {}
 
-func (_ *Go) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {}
+func (*Go) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {}
 
-func (_ *Go) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
+func (*Go) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
 	so.writeLineFmt("const %s uint32 = %d;", toPascalCase(name...), value)
 }
 
-func (_ *Go) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
+func (*Go) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
 	so.writeLineFmt("const %s int64 = %d;", toPascalCase(name...), value)
 }
 
-func (_ *Go) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
+func (*Go) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
 	var keys []uint32
 	for k := range value {
 		keys = append(keys, k)
@@ -76,19 +76,19 @@
 	so.writeLineFmt("}")
 }
 
-func (_ *Go) writeStringConstant(so *sourceOutputter, value string, name ...string) {
+func (*Go) writeStringConstant(so *sourceOutputter, value string, name ...string) {
 	so.writeLineFmt("const %s string = \"%s\";", toPascalCase(name...), value)
 }
 
-func (_ *Go) writeStructBegin(so *sourceOutputter, name ...string) {
+func (*Go) writeStructBegin(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("type %s struct {", toPascalCase(name...))
 }
 
-func (_ *Go) writeStructField(so *sourceOutputter, name, typeName []string) {
+func (*Go) writeStructField(so *sourceOutputter, name, typeName []string) {
 	so.writeLineFmt("  %s %s", toPascalCase(name...), toPascalCase(typeName...))
 }
 
-func (_ *Go) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
+func (*Go) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
 	so.writeLine("}")
 	so.writeLine("")
 	so.writeLineFmt("func (s %s) ToArray() []uint32 {", toPascalCase(structName...))
@@ -99,7 +99,7 @@
 	so.writeLine("  }")
 }
 
-func (_ *Go) writeStructEnd(so *sourceOutputter) {
+func (*Go) writeStructEnd(so *sourceOutputter) {
 	so.writeLine("}")
 }
 
diff --git a/src/bin/config_parser/src/source_generator/java.go b/src/bin/config_parser/src/source_generator/java.go
index a94f83d..4c8e09c 100644
--- a/src/bin/config_parser/src/source_generator/java.go
+++ b/src/bin/config_parser/src/source_generator/java.go
@@ -12,8 +12,8 @@
 
 type Java struct{}
 
-func (_ Java) getCommentPrefix() string { return "  //" }
-func (_ Java) supportsTypeAlias() bool  { return false }
+func (Java) getCommentPrefix() string { return "  //" }
+func (Java) supportsTypeAlias() bool  { return false }
 
 func getPackageName(namespaces []string) string {
 	ns := make([]string, len(namespaces))
@@ -23,7 +23,7 @@
 	return strings.Join(ns, ".")
 }
 
-func (_ Java) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (Java) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 	if len(namespaces) > 0 {
 		so.writeLineFmt("package %s;", getPackageName(namespaces))
 	}
@@ -36,24 +36,24 @@
 	}
 }
 
-func (_ Java) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (Java) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 }
 
-func (_ Java) writeEnumBegin(so *sourceOutputter, name ...string) {
+func (Java) writeEnumBegin(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("  public static enum %s {", toPascalCase(name...))
 }
 
-func (_ Java) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
+func (Java) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
 	so.writeLineFmt("    %s(%d),", toUpperSnakeCase(name...), value)
 }
 
-func (_ Java) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {}
+func (Java) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {}
 
-func (_ Java) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
+func (Java) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
 	so.writeLineFmt("    %s(%s.code),", toUpperSnakeCase(to...), toUpperSnakeCase(from...))
 }
 
-func (_ Java) writeEnumEnd(so *sourceOutputter, name ...string) {
+func (Java) writeEnumEnd(so *sourceOutputter, name ...string) {
 	so.writeLine("    ;")
 	so.writeLine("")
 	so.writeLine("    private final int code;")
@@ -68,14 +68,14 @@
 	so.writeLine("  }")
 }
 
-func (_ Java) writeEnumExport(so *sourceOutputter, enumName, name []string) {
+func (Java) writeEnumExport(so *sourceOutputter, enumName, name []string) {
 	variant := toUpperSnakeCase(name...)
 	so.writeLineFmt("  public static final int %s_%s = %s.%s.code;", toUpperSnakeCase(enumName...), variant, toPascalCase(enumName...), variant)
 }
 
-func (_ Java) writeTypeAlias(so *sourceOutputter, from, to []string) {}
+func (Java) writeTypeAlias(so *sourceOutputter, from, to []string) {}
 
-func (_ Java) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {
+func (Java) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {
 	so.writeLine("")
 	so.writeLine("/** Constants defined in the Cobalt Registry. */")
 	so.writeLine("@SuppressWarnings(\"javadoc\")")
@@ -83,21 +83,21 @@
 	so.writeLineFmt("public final class %s {", toPascalCase(outputFilename))
 }
 
-func (_ Java) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {
+func (Java) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {
 	so.writeLine("  /** Private constructor to prevent instantiation of static class. */")
 	so.writeLineFmt("  private %s() {}", toPascalCase(outputFilename))
 	so.writeLine("}")
 }
 
-func (_ Java) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
+func (Java) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
 	so.writeLineFmt("  public static final long %s = %dL;", toUpperSnakeCase(name...), value)
 }
 
-func (_ Java) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
+func (Java) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
 	so.writeLineFmt("  public static final long %s = %dL;", toUpperSnakeCase(name...), value)
 }
 
-func (_ Java) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
+func (Java) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
 
 	var keys []uint32
 	for k := range value {
@@ -113,19 +113,19 @@
 	so.writeLineFmt("  );")
 }
 
-func (_ Java) writeStringConstant(so *sourceOutputter, value string, name ...string) {
+func (Java) writeStringConstant(so *sourceOutputter, value string, name ...string) {
 	so.writeLineFmt("  public static final String %s = \"%s\";", toUpperSnakeCase(name...), value)
 }
 
-func (_ Java) writeStructBegin(so *sourceOutputter, name ...string) {
+func (Java) writeStructBegin(so *sourceOutputter, name ...string) {
 	so.writeLineFmt("  public static class %s {", toPascalCase(name...))
 }
 
-func (_ Java) writeStructField(so *sourceOutputter, name, typeName []string) {
+func (Java) writeStructField(so *sourceOutputter, name, typeName []string) {
 	so.writeLineFmt("    public %s %s;", toPascalCase(typeName...), toCamelCase(name...))
 }
 
-func (_ Java) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
+func (Java) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
 	so.writeLine("")
 	so.writeLine("    public List<Integer> toList() {")
 	so.writeLineFmt("      return Arrays.asList(")
@@ -140,7 +140,7 @@
 	so.writeLine("    }")
 }
 
-func (_ Java) writeStructEnd(so *sourceOutputter) {
+func (Java) writeStructEnd(so *sourceOutputter) {
 	so.writeLine("  }")
 }
 
diff --git a/src/bin/config_parser/src/source_generator/rust.go b/src/bin/config_parser/src/source_generator/rust.go
index 1cdc10a..6107a55 100644
--- a/src/bin/config_parser/src/source_generator/rust.go
+++ b/src/bin/config_parser/src/source_generator/rust.go
@@ -12,12 +12,12 @@
 
 type Rust struct{}
 
-func (_ Rust) getCommentPrefix() string { return "//" }
-func (_ Rust) supportsTypeAlias() bool  { return true }
+func (Rust) getCommentPrefix() string { return "//" }
+func (Rust) supportsTypeAlias() bool  { return true }
 
-func (_ Rust) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (Rust) writeExtraHeader(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 }
-func (_ Rust) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
+func (Rust) writeExtraFooter(so *sourceOutputter, projectName, customerName string, namespaces []string) {
 }
 
 // See: https://doc.rust-lang.org/reference/keywords.html
@@ -38,26 +38,26 @@
 	return value
 }
 
-func (_ Rust) writeEnumBegin(so *sourceOutputter, name ...string) {
+func (Rust) writeEnumBegin(so *sourceOutputter, name ...string) {
 	so.writeLine("#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]")
 	so.writeLineFmt("pub enum %s {", toPascalCase(name...))
 }
 
-func (_ Rust) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
+func (Rust) writeEnumEntry(so *sourceOutputter, value uint32, name ...string) {
 	so.writeLineFmt("  %s = %d,", toPascalCase(name...), value)
 }
 
-func (_ Rust) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {
+func (Rust) writeEnumAliasesBegin(so *sourceOutputter, name ...string) {
 	so.writeLine("}")
 	so.writeLineFmt("impl %s {", toPascalCase(name...))
 }
 
-func (_ Rust) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
+func (Rust) writeEnumAlias(so *sourceOutputter, name, from, to []string) {
 	so.writeLine("  #[allow(non_upper_case_globals)]")
 	so.writeLineFmt("  pub const %s: %s = %s::%s;", toPascalCase(to...), toPascalCase(name...), toPascalCase(name...), toPascalCase(from...))
 }
 
-func (_ Rust) writeEnumEnd(so *sourceOutputter, name ...string) {
+func (Rust) writeEnumEnd(so *sourceOutputter, name ...string) {
 	so.writeLine("}")
 	so.writeLine("")
 	so.writeLineFmt("impl cobalt_client::traits::AsEventCode for %s {", toPascalCase(name...))
@@ -70,13 +70,13 @@
 
 // We don't alias Enums in rust, since this can easily be accomplished with a
 // use EnumName::*;
-func (_ Rust) writeEnumExport(so *sourceOutputter, enumName, name []string) {}
+func (Rust) writeEnumExport(so *sourceOutputter, enumName, name []string) {}
 
-func (_ Rust) writeTypeAlias(so *sourceOutputter, from, to []string) {
+func (Rust) writeTypeAlias(so *sourceOutputter, from, to []string) {
 	so.writeLineFmt("pub use %s as %s;", toPascalCase(from...), toPascalCase(to...))
 }
 
-func (_ Rust) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {
+func (Rust) writeNamespacesBegin(so *sourceOutputter, namespaces []string, outputFilename string) {
 	if len(namespaces) > 0 {
 		for _, ns := range namespaces {
 			so.writeLineFmt("pub mod %s {", escapeIdent(toSnakeCase(ns)))
@@ -84,7 +84,7 @@
 	}
 }
 
-func (_ Rust) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {
+func (Rust) writeNamespacesEnd(so *sourceOutputter, namespaces []string, outputFilename string) {
 	if len(namespaces) > 0 {
 		for _, _ = range namespaces {
 			so.writeLine("}")
@@ -92,15 +92,15 @@
 	}
 }
 
-func (_ Rust) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
+func (Rust) writeConstUint32(so *sourceOutputter, value uint32, name ...string) {
 	so.writeLineFmt("pub const %s: u32 = %d;", toUpperSnakeCase(name...), value)
 }
 
-func (_ Rust) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
+func (Rust) writeConstInt64(so *sourceOutputter, value int64, name ...string) {
 	so.writeLineFmt("pub const %s: i64 = %d;", toUpperSnakeCase(name...), value)
 }
 
-func (_ Rust) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
+func (Rust) writeConstMap(so *sourceOutputter, value map[uint32]string, name ...string) {
 	var keys []uint32
 	for k := range value {
 		keys = append(keys, k)
@@ -115,20 +115,20 @@
 	so.writeLineFmt("];")
 }
 
-func (_ Rust) writeStringConstant(so *sourceOutputter, value string, name ...string) {
+func (Rust) writeStringConstant(so *sourceOutputter, value string, name ...string) {
 	so.writeLineFmt("pub const %s: &str = \"%s\";", toUpperSnakeCase(name...), value)
 }
 
-func (_ Rust) writeStructBegin(so *sourceOutputter, name ...string) {
+func (Rust) writeStructBegin(so *sourceOutputter, name ...string) {
 	so.writeLine("#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]")
 	so.writeLineFmt("pub struct %s {", toPascalCase(name...))
 }
 
-func (_ Rust) writeStructField(so *sourceOutputter, name, typeName []string) {
+func (Rust) writeStructField(so *sourceOutputter, name, typeName []string) {
 	so.writeLineFmt("  pub %s: %s,", escapeIdent(toSnakeCase(name...)), escapeIdent(toPascalCase(typeName...)))
 }
 
-func (_ Rust) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
+func (Rust) writeToVectorMethod(so *sourceOutputter, structName []string, fields [][]string) {
 	so.writeLine("}")
 	so.writeLine("")
 	so.writeLineFmt("impl cobalt_client::traits::AsEventCodes for %s {", toPascalCase(structName...))
@@ -142,7 +142,7 @@
 	so.writeLine("  }")
 }
 
-func (_ Rust) writeStructEnd(so *sourceOutputter) {
+func (Rust) writeStructEnd(so *sourceOutputter) {
 	so.writeLine("}")
 }
 
