...

Source file src/go.einride.tech/aip/resourcename/hasparent.go

Documentation: go.einride.tech/aip/resourcename

     1  package resourcename
     2  
     3  // HasParent tests whether name has the specified parent. Wildcard segments (-) are considered.
     4  // Resource names without revisions are considered parents of the same resource name with a revision.
     5  func HasParent(name, parent string) bool {
     6  	if name == "" || parent == "" || name == parent {
     7  		return false
     8  	}
     9  	var parentScanner, nameScanner Scanner
    10  	parentScanner.Init(parent)
    11  	nameScanner.Init(name)
    12  	for parentScanner.Scan() {
    13  		if !nameScanner.Scan() {
    14  			return false
    15  		}
    16  		if parentScanner.Segment().IsWildcard() {
    17  			continue
    18  		}
    19  		// Special-case: Identical resource IDs without revision are parents of revisioned resource IDs.
    20  		if nameScanner.Segment().Literal().HasRevision() &&
    21  			!parentScanner.Segment().Literal().HasRevision() &&
    22  			(nameScanner.Segment().Literal().ResourceID() == parentScanner.Segment().Literal().ResourceID()) {
    23  			continue
    24  		}
    25  		if parentScanner.Segment() != nameScanner.Segment() {
    26  			return false
    27  		}
    28  	}
    29  	if parentScanner.Full() && nameScanner.Full() {
    30  		return parentScanner.ServiceName() == nameScanner.ServiceName()
    31  	}
    32  	return true
    33  }
    34  

View as plain text