github.com/cycloidio/terraform@v1.1.10-0.20220513142504-76d5c768dc63/providers/addressed_types.go (about)

     1  package providers
     2  
     3  import (
     4  	"sort"
     5  
     6  	"github.com/cycloidio/terraform/addrs"
     7  )
     8  
     9  // AddressedTypesAbs is a helper that extracts all of the distinct provider
    10  // types from the given list of absolute provider configuration addresses.
    11  func AddressedTypesAbs(providerAddrs []addrs.AbsProviderConfig) []addrs.Provider {
    12  	if len(providerAddrs) == 0 {
    13  		return nil
    14  	}
    15  	m := map[string]addrs.Provider{}
    16  	for _, addr := range providerAddrs {
    17  		m[addr.Provider.String()] = addr.Provider
    18  	}
    19  
    20  	names := make([]string, 0, len(m))
    21  	for typeName := range m {
    22  		names = append(names, typeName)
    23  	}
    24  
    25  	sort.Strings(names) // Stable result for tests
    26  
    27  	ret := make([]addrs.Provider, len(names))
    28  	for i, name := range names {
    29  		ret[i] = m[name]
    30  	}
    31  
    32  	return ret
    33  }