mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 00:52:26 -05:00 
			
		
		
		
	
		
			
	
	
		
			44 lines
		
	
	
	
		
			1,018 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			44 lines
		
	
	
	
		
			1,018 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | // 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) | ||
|  | } |