diff --git a/utils/proto.go b/utils/proto.go index 53fb80e63..1322965d1 100644 --- a/utils/proto.go +++ b/utils/proto.go @@ -14,7 +14,11 @@ package utils -import "google.golang.org/protobuf/proto" +import ( + "github.com/livekit/protocol/livekit/logger" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" +) func CloneProto[T proto.Message](m T) T { return proto.Clone(m).(T) @@ -27,3 +31,15 @@ func CloneProtoSlice[T proto.Message](ms []T) []T { } return cs } + +func CloneProtoRedacted[T proto.Message](m T) T { + clone := proto.Clone(m).(T) + reflected := clone.ProtoReflect() + reflected.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if proto.HasExtension(fd.Options(), logger.E_Redact) { + reflected.Clear(fd) + } + return true + }) + return clone +}