You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			44 lines
		
	
	
		
			1018 B
		
	
	
	
		
			Go
		
	
		
		
			
		
	
	
			44 lines
		
	
	
		
			1018 B
		
	
	
	
		
			Go
		
	
| 
											2 years ago
										 | // Copyright 2019 The Go Authors. All rights reserved.
 | ||
|  | // Use of this source code is governed by a BSD-style
 | ||
|  | // license that can be found in the LICENSE file.
 | ||
|  | 
 | ||
|  | package proto | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 
 | ||
|  | 	"google.golang.org/protobuf/reflect/protoreflect" | ||
|  | ) | ||
|  | 
 | ||
|  | // Reset clears every field in the message.
 | ||
|  | // The resulting message shares no observable memory with its previous state
 | ||
|  | // other than the memory for the message itself.
 | ||
|  | func Reset(m Message) { | ||
|  | 	if mr, ok := m.(interface{ Reset() }); ok && hasProtoMethods { | ||
|  | 		mr.Reset() | ||
|  | 		return | ||
|  | 	} | ||
|  | 	resetMessage(m.ProtoReflect()) | ||
|  | } | ||
|  | 
 | ||
|  | func resetMessage(m protoreflect.Message) { | ||
|  | 	if !m.IsValid() { | ||
|  | 		panic(fmt.Sprintf("cannot reset invalid %v message", m.Descriptor().FullName())) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Clear all known fields.
 | ||
|  | 	fds := m.Descriptor().Fields() | ||
|  | 	for i := 0; i < fds.Len(); i++ { | ||
|  | 		m.Clear(fds.Get(i)) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Clear extension fields.
 | ||
|  | 	m.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { | ||
|  | 		m.Clear(fd) | ||
|  | 		return true | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	// Clear unknown fields.
 | ||
|  | 	m.SetUnknown(nil) | ||
|  | } |