1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved. 2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style 3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file. 4*1c12ee1eSDan Willemsen 5*1c12ee1eSDan Willemsenpackage proto 6*1c12ee1eSDan Willemsen 7*1c12ee1eSDan Willemsenimport ( 8*1c12ee1eSDan Willemsen "fmt" 9*1c12ee1eSDan Willemsen 10*1c12ee1eSDan Willemsen "google.golang.org/protobuf/reflect/protoreflect" 11*1c12ee1eSDan Willemsen) 12*1c12ee1eSDan Willemsen 13*1c12ee1eSDan Willemsen// Reset clears every field in the message. 14*1c12ee1eSDan Willemsen// The resulting message shares no observable memory with its previous state 15*1c12ee1eSDan Willemsen// other than the memory for the message itself. 16*1c12ee1eSDan Willemsenfunc Reset(m Message) { 17*1c12ee1eSDan Willemsen if mr, ok := m.(interface{ Reset() }); ok && hasProtoMethods { 18*1c12ee1eSDan Willemsen mr.Reset() 19*1c12ee1eSDan Willemsen return 20*1c12ee1eSDan Willemsen } 21*1c12ee1eSDan Willemsen resetMessage(m.ProtoReflect()) 22*1c12ee1eSDan Willemsen} 23*1c12ee1eSDan Willemsen 24*1c12ee1eSDan Willemsenfunc resetMessage(m protoreflect.Message) { 25*1c12ee1eSDan Willemsen if !m.IsValid() { 26*1c12ee1eSDan Willemsen panic(fmt.Sprintf("cannot reset invalid %v message", m.Descriptor().FullName())) 27*1c12ee1eSDan Willemsen } 28*1c12ee1eSDan Willemsen 29*1c12ee1eSDan Willemsen // Clear all known fields. 30*1c12ee1eSDan Willemsen fds := m.Descriptor().Fields() 31*1c12ee1eSDan Willemsen for i := 0; i < fds.Len(); i++ { 32*1c12ee1eSDan Willemsen m.Clear(fds.Get(i)) 33*1c12ee1eSDan Willemsen } 34*1c12ee1eSDan Willemsen 35*1c12ee1eSDan Willemsen // Clear extension fields. 36*1c12ee1eSDan Willemsen m.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { 37*1c12ee1eSDan Willemsen m.Clear(fd) 38*1c12ee1eSDan Willemsen return true 39*1c12ee1eSDan Willemsen }) 40*1c12ee1eSDan Willemsen 41*1c12ee1eSDan Willemsen // Clear unknown fields. 42*1c12ee1eSDan Willemsen m.SetUnknown(nil) 43*1c12ee1eSDan Willemsen} 44