github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/providers/addressed_types.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package providers 5 6 import ( 7 "sort" 8 9 "github.com/terramate-io/tf/addrs" 10 ) 11 12 // AddressedTypesAbs is a helper that extracts all of the distinct provider 13 // types from the given list of absolute provider configuration addresses. 14 func AddressedTypesAbs(providerAddrs []addrs.AbsProviderConfig) []addrs.Provider { 15 if len(providerAddrs) == 0 { 16 return nil 17 } 18 m := map[string]addrs.Provider{} 19 for _, addr := range providerAddrs { 20 m[addr.Provider.String()] = addr.Provider 21 } 22 23 names := make([]string, 0, len(m)) 24 for typeName := range m { 25 names = append(names, typeName) 26 } 27 28 sort.Strings(names) // Stable result for tests 29 30 ret := make([]addrs.Provider, len(names)) 31 for i, name := range names { 32 ret[i] = m[name] 33 } 34 35 return ret 36 }