github.com/googleapis/api-linter@v1.65.2/rules/aip0134/request_resource_required.go (about)

     1  package aip0134
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/googleapis/api-linter/lint"
     7  	"github.com/googleapis/api-linter/rules/internal/utils"
     8  	"github.com/jhump/protoreflect/desc"
     9  )
    10  
    11  // The create request message should have resource field.
    12  var requestResourceRequired = &lint.MessageRule{
    13  	Name:   lint.NewRuleName(134, "request-resource-required"),
    14  	OnlyIf: utils.IsUpdateRequestMessage,
    15  	LintMessage: func(m *desc.MessageDescriptor) []lint.Problem {
    16  		resourceMsgName := extractResource(m.GetName())
    17  		for _, fieldDesc := range m.GetFields() {
    18  			msgDesc := fieldDesc.GetMessageType()
    19  			if msgDesc != nil && msgDesc.GetName() == resourceMsgName {
    20  				// found the resource field.
    21  				return nil
    22  			}
    23  		}
    24  
    25  		// No resource field.
    26  		return []lint.Problem{{
    27  			Message:    fmt.Sprintf("Message %q has no %q type field", m.GetName(), resourceMsgName),
    28  			Descriptor: m,
    29  		}}
    30  	},
    31  }