mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 00:22:26 -06:00 
			
		
		
		
	* start fixing up tests * fix up tests + automate with drone * fiddle with linting * messing about with drone.yml * some more fiddling * hmmm * add cache * add vendor directory * verbose * ci updates * update some little things * update sig
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1,018 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			43 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)
 | 
						|
}
 |