utils

package
v0.0.0-...-c2ec184 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2024 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// VersionedSegment is a regex to extract the API version from
	// an HTTP path.
	VersionedSegment = regexp.MustCompile(`\{\$api_version\}`)
)

Functions

func DeclarativeFriendlyResource

func DeclarativeFriendlyResource(d desc.Descriptor) *desc.MessageDescriptor

DeclarativeFriendlyResource returns the declarative-friendly resource associated with this descriptor.

For messages: If the message is annotated with google.api.resource and style: DECLARATIVE_FRIENDLY is set, that message is returned. If the message is a standard method request message for a resource with google.api.resource and style:DECLARATIVE_FRIENDLY set, then the resource is returned.

For methods: If the output message is a declarative-friendly resource, it is returned. If the method begins with "List" and the first repeated field is a declarative-friendly resource, the resource is returned. If the method begins with "Delete", the return type is Empty, and an appropriate resource message is found and is declarative-friendly, that resource is returned. If the method is a custom method where a matching resource is found (by subset checks on the name) and is declarative-friendly, the resource is returned.

If there is no declarative-friendly resource, it returns nil.

func FindFieldDotNotation

func FindFieldDotNotation(msg *desc.MessageDescriptor, ref string) *desc.FieldDescriptor

FindFieldDotNotation returns a field descriptor from a given message that corresponds to the dot separated path e.g. "book.name". If the path is unresolable the method returns nil. This is especially useful for resolving path variables in google.api.http and nested fields in google.api.method_signature annotations.

func FindMessage

func FindMessage(f *desc.FileDescriptor, name string) *desc.MessageDescriptor

FindMessage looks for a message in a file and all imports within the same package.

func FindMethod

func FindMethod(f *desc.FileDescriptor, name string) *desc.MethodDescriptor

FindMethod searches a file and all imports within the same package, and returns the method with a given name, or nil if none is found.

func FindResource

func FindResource(reference string, file *desc.FileDescriptor) *apb.ResourceDescriptor

FindResource returns first resource of type matching the reference param. resource Type name being referenced. It looks within a given file and its depenedencies, it cannot search within the entire protobuf package. This is especially useful for resolving google.api.resource_reference annotations.

func FindResourceChildren

func FindResourceChildren(parent *apb.ResourceDescriptor, file *desc.FileDescriptor) []*apb.ResourceDescriptor

FindResourceChildren attempts to search for other resources defined in the package that are parented by the given resource.

func FindResourceMessage

func FindResourceMessage(reference string, file *desc.FileDescriptor) *desc.MessageDescriptor

FindResourceMessage returns the message containing the first resource of type matching the resource Type name being referenced. It looks within a given file and its depenedencies, it cannot search within the entire protobuf package. This is especially useful for resolving google.api.resource_reference annotations to the message that owns a resource.

func GetAllDependencies

func GetAllDependencies(file *desc.FileDescriptor) map[string]*desc.FileDescriptor

GetAllDependencies returns all dependencies.

func GetFieldBehavior

func GetFieldBehavior(f *desc.FieldDescriptor) stringset.Set

GetFieldBehavior returns a stringset.Set of FieldBehavior annotations for the given field.

func GetFieldInfo

func GetFieldInfo(fd *desc.FieldDescriptor) *apb.FieldInfo

func GetListResourceMessage

func GetListResourceMessage(m *desc.MethodDescriptor) *desc.MessageDescriptor

GetListResourceMessage returns the resource for a list method, nil otherwise.

func GetMetadataType

func GetMetadataType(m *desc.MethodDescriptor) *desc.MessageDescriptor

GetMetadataType returns the message referred to by the (google.longrunning.operation_info).metadata_type annotation.

func GetMethodSignatures

func GetMethodSignatures(m *desc.MethodDescriptor) [][]string

GetMethodSignatures returns the `google.api.method_signature` annotations.

func GetOperationInfo

func GetOperationInfo(m *desc.MethodDescriptor) *lrpb.OperationInfo

GetOperationInfo returns the google.longrunning.operation_info annotation.

func GetOperationResponseType

func GetOperationResponseType(m *desc.MethodDescriptor) *desc.MessageDescriptor

GetOperationResponseType returns the message referred to by the (google.longrunning.operation_info).response_type annotation.

func GetRepeatedMessageFields

func GetRepeatedMessageFields(m *desc.MessageDescriptor) []*desc.FieldDescriptor

GetRepeatedMessageFields returns all fields labeled `repeated` of type Message in the given message, sorted in field number order.

func GetResource

GetResource returns the google.api.resource annotation.

func GetResourceDefinitions

func GetResourceDefinitions(f *desc.FileDescriptor) []*apb.ResourceDescriptor

GetResourceDefinitions returns the google.api.resource_definition annotations for a file.

func GetResourceMessageName

func GetResourceMessageName(m *desc.MethodDescriptor, expectedVerb string) string

GetResourceMessageName returns the resource message type name from method

func GetResourceNameField

func GetResourceNameField(r *apb.ResourceDescriptor) string

GetResourceNameField is a convenience method for getting the name of the field that represents the resource's name. This is either set by the `name_field` attribute, or defaults to "name".

func GetResourcePlural

func GetResourcePlural(r *apb.ResourceDescriptor) string

GetResourcePlural is a convenience method for getting the `plural` field of a resource.

func GetResourceReference

func GetResourceReference(f *desc.FieldDescriptor) *apb.ResourceReference

GetResourceReference returns the google.api.resource_reference annotation.

func GetResourceSingular

func GetResourceSingular(r *apb.ResourceDescriptor) string

GetResourceSingular returns the resource singular. The empty string is returned if the singular cannot be found. Since the singular is not always annotated, it extracts it from multiple different locations including: 1. the singular annotation 2. the type definition

func GetResponseType

func GetResponseType(m *desc.MethodDescriptor) *desc.MessageDescriptor

GetResponseType returns the OutputType if the response is not an LRO, or the ResponseType otherwise.

func GetTypeName

func GetTypeName(f *desc.FieldDescriptor) string

GetTypeName returns the name of the type of the field, as a string, regardless of primitive, message, etc.

func HasFieldInfo

func HasFieldInfo(fd *desc.FieldDescriptor) bool

func HasFormat

func HasFormat(fd *desc.FieldDescriptor) bool

func HasHTTPRules

func HasHTTPRules(m *desc.MethodDescriptor) bool

HasHTTPRules returns true when the given method descriptor is annotated with a google.api.http option.

func HasResourceReference

func HasResourceReference(f *desc.FieldDescriptor) bool

HasResourceReference returns if the field has a google.api.resource_reference annotation.

func IsCommonProto

func IsCommonProto(f *desc.FileDescriptor) bool

IsCommonProto returns true if a proto file is considered "common".

func IsCreateMethod

func IsCreateMethod(m *desc.MethodDescriptor) bool

IsCreateMethod returns true if this is a AEP-133 Create method.

func IsCreateRequestMessage

func IsCreateRequestMessage(m *desc.MessageDescriptor) bool

Returns true if this is an AEP-133 Get request message, false otherwise.

func IsDeclarativeFriendlyMessage

func IsDeclarativeFriendlyMessage(m *desc.MessageDescriptor) bool

IsDeclarativeFriendlyMessage returns true if the descriptor is declarative-friendly (if DeclarativeFriendlyResource(m) is not nil).

func IsDeclarativeFriendlyMethod

func IsDeclarativeFriendlyMethod(m *desc.MethodDescriptor) bool

IsDeclarativeFriendlyMethod returns true if the method is for a declarative-friendly resource (if DeclarativeFriendlyResource(m) is not nil).

func IsDeleteMethod

func IsDeleteMethod(m *desc.MethodDescriptor) bool

Returns true if this is a AEP-135 Delete method, false otherwise.

func IsDeleteRequestMessage

func IsDeleteRequestMessage(m *desc.MessageDescriptor) bool

Returns true if this is an AEP-135 Delete request message, false otherwise.

func IsGetMethod

func IsGetMethod(m *desc.MethodDescriptor) bool

IsGetMethod returns true if this is a AEP-131 Get method.

func IsGetRequestMessage

func IsGetRequestMessage(m *desc.MessageDescriptor) bool

Returns true if this is an AEP-131 Get request message, false otherwise.

func IsLegacyListRevisionsMethod

func IsLegacyListRevisionsMethod(m *desc.MethodDescriptor) bool

IsLegacyListRevisions identifies such a method by having the appropriate method name, having a `name` field instead of parent, and a HTTP suffix of `listRevisions`.

func IsListMethod

func IsListMethod(m *desc.MethodDescriptor) bool

IsListMethod return true if this is an AEP-132 List method

func IsListRequestMessage

func IsListRequestMessage(m *desc.MessageDescriptor) bool

Return true if this is an AEP-132 List request message, false otherwise.

func IsListResponseMessage

func IsListResponseMessage(m *desc.MessageDescriptor) bool

Return true if this is an AEP-132 List response message, false otherwise.

func IsListRevisionsRequestMessage

func IsListRevisionsRequestMessage(m *desc.MessageDescriptor) bool

IsListRevisionsRequestMessage returns true if this is an AEP-162 List Revisions request message, false otherwise.

func IsListRevisionsResponseMessage

func IsListRevisionsResponseMessage(m *desc.MessageDescriptor) bool

IsListRevisionsResponseMessage returns true if this is an AEP-162 List Revisions response message, false otherwise.

func IsOperation

func IsOperation(m *desc.MessageDescriptor) bool

IsOperation returns if the message is a longrunning Operation or not.

func IsResource

func IsResource(m *desc.MessageDescriptor) bool

IsResource returns true if the message has a populated google.api.resource annotation with a non-empty "type" field.

func IsResourceRevision

func IsResourceRevision(m *desc.MessageDescriptor) bool

IsResourceRevision determines if the given message represents a resource revision as described in AEP-162.

func IsRevisionRelationship

func IsRevisionRelationship(parent, revision *apb.ResourceDescriptor) bool

IsRevisionRelationship determines if the "revision" resource is actually a revision of the "parent" resource.

func IsSingletonResource

func IsSingletonResource(m *desc.MessageDescriptor) bool

IsSingletonResource returns true if the given message is a singleton resource according to its pattern.

func IsStreaming

func IsStreaming(m *desc.MethodDescriptor) bool

IsStreaming returns if the method is either client or server streaming.

func IsUpdateMethod

func IsUpdateMethod(m *desc.MethodDescriptor) bool

IsUpdateMethod returns true if this is a AEP-134 Update method

func IsUpdateRequestMessage

func IsUpdateRequestMessage(m *desc.MessageDescriptor) bool

Returns true if this is an AEP-134 Update request message, false otherwise.

func LintFieldMask

func LintFieldMask(f *desc.FieldDescriptor) []lint.Problem

LintFieldMask returns a problem if the field is not a singular google.protobuf.FieldMask.

func LintFieldPresent

func LintFieldPresent(m *desc.MessageDescriptor, field string) (*desc.FieldDescriptor, []lint.Problem)

LintFieldPresent returns a problem if the given message does not have the given field.

func LintFieldPresentAndSingularString

func LintFieldPresentAndSingularString(field string) func(*desc.MessageDescriptor) []lint.Problem

LintFieldPresentAndSingularString returns a problem if a message does not have the given singular-string field.

func LintFieldResourceReference

func LintFieldResourceReference(f *desc.FieldDescriptor) []lint.Problem

LintFieldResourceReference returns a problem if the field does not have a resource reference annotation.

func LintHTTPMethod

func LintHTTPMethod(verb string) func(*desc.MethodDescriptor) []lint.Problem

LintHTTPMethod returns a problem for each HTTP rule whose HTTP method is not the given one.

func LintHTTPURIHasParentVariable

func LintHTTPURIHasParentVariable(m *desc.MethodDescriptor) []lint.Problem

LintHTTPURIHasParentVariable returns a problem if any of the given method's HTTP rules do not have a parent variable in the URI.

func LintHTTPURIHasPathVariable

func LintHTTPURIHasPathVariable(m *desc.MethodDescriptor) []lint.Problem

LintHTTPURIHasPathVariable returns a problem if any of the given method's HTTP rules do not have a path variable in the URI.

func LintHTTPURIHasVariable

func LintHTTPURIHasVariable(m *desc.MethodDescriptor, v string) []lint.Problem

LintHTTPURIHasVariable returns a problem if any of the given method's HTTP rules do not have the given variable in the URI.

func LintHTTPURIVariableCount

func LintHTTPURIVariableCount(m *desc.MethodDescriptor, n int) []lint.Problem

LintHTTPURIVariableCount returns a problem if the given method's HTTP rules do not contain the given number of variables in the URI.

func LintMethodHasMatchingRequestName

func LintMethodHasMatchingRequestName(m *desc.MethodDescriptor) []lint.Problem

LintMethodHasMatchingRequestName returns a problem if the given method's request type does not have a name matching the method's, with a "Request" suffix.

func LintMethodHasMatchingResponseName

func LintMethodHasMatchingResponseName(m *desc.MethodDescriptor) []lint.Problem

LintMethodHasMatchingResponseName returns a problem if the given method's response type does not have a name matching the method's, with a "Response" suffix.

func LintNoHTTPBody

func LintNoHTTPBody(m *desc.MethodDescriptor) []lint.Problem

LintNoHTTPBody returns a problem for each HTTP rule whose body is not "".

func LintNotOneof

func LintNotOneof(f *desc.FieldDescriptor) []lint.Problem

LintNotOneof returns a problem if the field is a oneof.

func LintOutputOnlyField

func LintOutputOnlyField(f *desc.FieldDescriptor) []lint.Problem

LintOutputOnlyField returns a problem if the field's behavior is not OUTPUT_ONLY.

func LintRequiredField

func LintRequiredField(f *desc.FieldDescriptor) []lint.Problem

LintRequiredField returns a problem if the field's behavior is not REQUIRED.

func LintSingularBoolField

func LintSingularBoolField(f *desc.FieldDescriptor) []lint.Problem

LintSingularBoolField returns a problem if the field is not a singular bool.

func LintSingularField

func LintSingularField(f *desc.FieldDescriptor, t *builder.FieldType, want string) []lint.Problem

LintSingularField returns a problem if the field is not singular i.e. it is repeated.

func LintSingularStringField

func LintSingularStringField(f *desc.FieldDescriptor) []lint.Problem

LintSingularStringField returns a problem if the field is not a singular string.

func LintWildcardHTTPBody

func LintWildcardHTTPBody(m *desc.MethodDescriptor) []lint.Problem

LintWildcardHTTPBody returns a problem for each HTTP rule whose body is not "*".

func ListResponseResourceName

func ListResponseResourceName(m *desc.MessageDescriptor) string

Returns the name of the resource type from the response message name based on Standard List response message naming convention. If the message is not a Standard List response message, empty string is returned.

func SeparateInternalComments

func SeparateInternalComments(comments ...string) struct {
	Internal []string
	External []string
}

SeparateInternalComments splits the given comment block into "external" and "internal" comments based on https://google.aep.dev/192#internal-comments.

func SplitResourceTypeName

func SplitResourceTypeName(typ string) (service string, typeName string, ok bool)

SplitResourceTypeName splits the `Resource.type` field into the service name and the resource type name.

func ToLowerCamelCase

func ToLowerCamelCase(s string) string

ToLowerCamelCase returns the lowerCamelCase of a string, including removing delimiters (_,-,., ) and using them to denote a new word.

func ToPlural

func ToPlural(s string) string

ToPlural converts a string to its plural form.

func ToSingular

func ToSingular(s string) string

ToSingular converts a string to its singular form.

func ToUpperCamelCase

func ToUpperCamelCase(s string) string

ToUpperCamelCase returns the UpperCamelCase of a string, including removing delimiters (_,-,., ) and using them to denote a new word.

Types

type HTTPRule

type HTTPRule struct {
	// The HTTP method. Guaranteed to be in all caps.
	// This is set to "CUSTOM" if the Custom property is set.
	Method string

	// The HTTP URI (the value corresponding to the selected HTTP method).
	URI string

	// The `body` value forwarded from the generated proto's HttpRule.
	Body string

	// The `response_body` value forwarded from the generated proto's HttpRule.
	ResponseBody string
}

HTTPRule defines a parsed, easier-to-query equivalent to `apb.HttpRule`.

func GetHTTPRules

func GetHTTPRules(m *desc.MethodDescriptor) []*HTTPRule

GetHTTPRules returns a slice of HTTP rules for a given method descriptor.

Note: This returns a slice -- it takes the google.api.http annotation, and then flattens the values in `additional_bindings`. This allows rule authors to simply range over all of the HTTP rules, since the common case is to want to apply the checks to all of them.

func (*HTTPRule) GetPlainURI

func (h *HTTPRule) GetPlainURI() string

GetPlainURI returns the URI with variable segment information removed.

func (*HTTPRule) GetVariables

func (h *HTTPRule) GetVariables() map[string]string

GetVariables returns the variable segments in a URI as a map.

For a given variable, the key is the variable's field path. The value is the variable's template, which will match segment(s) of the URL.

For more details on the path template syntax, see https://github.com/googleapis/googleapis/blob/6e1a5a066659794f26091674e3668229e7750052/google/api/http.proto#L224.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL