mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 22:22:25 -05:00 
			
		
		
		
	
		
			
	
	
		
			34 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | // Copyright 2025 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 filedesc | ||
|  | 
 | ||
|  | import "google.golang.org/protobuf/reflect/protoreflect" | ||
|  | 
 | ||
|  | // UsePresenceForField reports whether the presence bitmap should be used for | ||
|  | // the specified field. | ||
|  | func UsePresenceForField(fd protoreflect.FieldDescriptor) (usePresence, canBeLazy bool) { | ||
|  | 	switch { | ||
|  | 	case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): | ||
|  | 		// Oneof fields never use the presence bitmap. | ||
|  | 		// | ||
|  | 		// Synthetic oneofs are an exception: Those are used to implement proto3 | ||
|  | 		// optional fields and hence should follow non-oneof field semantics. | ||
|  | 		return false, false | ||
|  | 
 | ||
|  | 	case fd.IsMap(): | ||
|  | 		// Map-typed fields never use the presence bitmap. | ||
|  | 		return false, false | ||
|  | 
 | ||
|  | 	case fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind: | ||
|  | 		// Lazy fields always use the presence bitmap (only messages can be lazy). | ||
|  | 		isLazy := fd.(interface{ IsLazy() bool }).IsLazy() | ||
|  | 		return isLazy, isLazy | ||
|  | 
 | ||
|  | 	default: | ||
|  | 		// If the field has presence, use the presence bitmap. | ||
|  | 		return fd.HasPresence(), false | ||
|  | 	} | ||
|  | } |