@@ -44,6 +44,13 @@ const oneOfTestValuesTemplate = `
4444 {{ .GenerateTestEncodingValues $.baseStruct $.OneOfField }}
4545 {{- end }}`
4646
47+ const oneOfDeleteOrigTemplate = `switch ov := orig.{{ .originFieldName }}.(type) {
48+ {{ range .values -}}
49+ case *{{ $.originTypePrefix }}{{ .GetOriginFieldName }}:
50+ {{ .GenerateDeleteOrig $.baseStruct $.OneOfField }}{{- end }}
51+ }
52+ `
53+
4754const oneOfCopyOrigTemplate = `switch t := src.{{ .originFieldName }}.(type) {
4855{{- range .values }}
4956{{ .GenerateCopyOrig $.baseStruct $.OneOfField }}
@@ -117,6 +124,20 @@ func (of *OneOfField) GenerateTestEncodingValues(ms *messageStruct) string {
117124 return template .Execute (template .Parse ("oneOfTestValuesTemplate" , []byte (oneOfTestValuesTemplate )), of .templateFields (ms ))
118125}
119126
127+ func (of * OneOfField ) GenerateDeleteOrig (ms * messageStruct ) string {
128+ atLeastOneMessage := false
129+ for i := range of .values {
130+ if _ , ok := of .values [i ].(* OneOfMessageValue ); ok {
131+ atLeastOneMessage = true
132+ break
133+ }
134+ }
135+ if atLeastOneMessage {
136+ return template .Execute (template .Parse ("oneOfDeleteOrigTemplate" , []byte (oneOfDeleteOrigTemplate )), of .templateFields (ms ))
137+ }
138+ return ""
139+ }
140+
120141func (of * OneOfField ) GenerateCopyOrig (ms * messageStruct ) string {
121142 return template .Execute (template .Parse ("oneOfCopyOrigTemplate" , []byte (oneOfCopyOrigTemplate )), of .templateFields (ms ))
122143}
@@ -170,6 +191,7 @@ type oneOfValue interface {
170191 GenerateTestValue (ms * messageStruct , of * OneOfField ) string
171192 GenerateTestFailingUnmarshalProtoValues (ms * messageStruct , of * OneOfField ) string
172193 GenerateTestEncodingValues (ms * messageStruct , of * OneOfField ) string
194+ GenerateDeleteOrig (ms * messageStruct , of * OneOfField ) string
173195 GenerateCopyOrig (ms * messageStruct , of * OneOfField ) string
174196 GenerateType (ms * messageStruct , of * OneOfField ) string
175197 GenerateMarshalJSON (ms * messageStruct , of * OneOfField ) string
0 commit comments