MCPcopy
hub / github.com/golang/protobuf / generateDefaultConstants

Method generateDefaultConstants

protoc-gen-go/generator/generator.go:1960–2032  ·  view source on GitHub ↗

generateDefaultConstants adds constants for default values if needed, which is only if the default value is. explicit in the proto.

(mc *msgCtx, topLevelFields []topLevelField)

Source from the content-addressed store, hash-verified

1958// generateDefaultConstants adds constants for default values if needed, which is only if the default value is.
1959// explicit in the proto.
1960func (g *Generator) generateDefaultConstants(mc *msgCtx, topLevelFields []topLevelField) {
1961 // Collect fields that can have defaults
1962 dFields := []defField{}
1963 for _, pf := range topLevelFields {
1964 if f, ok := pf.(*oneofField); ok {
1965 for _, osf := range f.subFields {
1966 dFields = append(dFields, osf)
1967 }
1968 continue
1969 }
1970 dFields = append(dFields, pf.(defField))
1971 }
1972 for _, df := range dFields {
1973 def := df.getProtoDef()
1974 if def == "" {
1975 continue
1976 }
1977 fieldname := g.defaultConstantName(mc.goName, df.getProtoName())
1978 typename := df.getGoType()
1979 if typename[0] == '*' {
1980 typename = typename[1:]
1981 }
1982 kind := "const "
1983 switch {
1984 case typename == "bool":
1985 case typename == "string":
1986 def = strconv.Quote(def)
1987 case typename == "[]byte":
1988 def = "[]byte(" + strconv.Quote(unescape(def)) + ")"
1989 kind = "var "
1990 case def == "inf", def == "-inf", def == "nan":
1991 // These names are known to, and defined by, the protocol language.
1992 switch def {
1993 case "inf":
1994 def = "math.Inf(1)"
1995 case "-inf":
1996 def = "math.Inf(-1)"
1997 case "nan":
1998 def = "math.NaN()"
1999 }
2000 if df.getProtoType() == descriptor.FieldDescriptorProto_TYPE_FLOAT {
2001 def = "float32(" + def + ")"
2002 }
2003 kind = "var "
2004 case df.getProtoType() == descriptor.FieldDescriptorProto_TYPE_FLOAT:
2005 if f, err := strconv.ParseFloat(def, 32); err == nil {
2006 def = fmt.Sprint(float32(f))
2007 }
2008 case df.getProtoType() == descriptor.FieldDescriptorProto_TYPE_DOUBLE:
2009 if f, err := strconv.ParseFloat(def, 64); err == nil {
2010 def = fmt.Sprint(f)
2011 }
2012 case df.getProtoType() == descriptor.FieldDescriptorProto_TYPE_ENUM:
2013 // Must be an enum. Need to construct the prefixed name.
2014 obj := g.ObjectNamed(df.getProtoTypeName())
2015 var enum *EnumDescriptor
2016 if id, ok := obj.(*ImportedDescriptor); ok {
2017 // The enum type has been publicly imported.

Callers 1

generateMessageMethod · 0.95

Calls 12

defaultConstantNameMethod · 0.95
ObjectNamedMethod · 0.95
DefaultPackageNameMethod · 0.95
prefixMethod · 0.95
PMethod · 0.95
addExportMethod · 0.80
unescapeFunction · 0.70
getProtoDefMethod · 0.65
getProtoNameMethod · 0.65
getGoTypeMethod · 0.65
getProtoTypeMethod · 0.65
getProtoTypeNameMethod · 0.65

Tested by

no test coverage detected