/
githubmirror
/
terraform
Обзор
Документация
Войти
/
githubmirror
/
terraform
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
internal/collections/cmp.go
57 строк
2 KB
Radek Simko
make copyrightfix
17 фев 2026, 16:56
17 фев 2026, 16:56
0fe906f
Код
Авторство
О чём код?
// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package collections import ( "github.com/google/go-cmp/cmp" ) // CmpOptions is a set of options for use with the "go-cmp" module when // comparing data structures that contain collection types from this package. // // Specifically, these options arrange for [Set] and [Map] values to be // transformed into map[any]any to allow for element-based comparisons. // // [Set] of T values transform into a map whose keys have dynamic type // UniqueKey[T] and whose values have dynamic type T. // // [Map] of K, V values transform into a map whose keys have dynamic type // UniqueKey[K] and whose values have dynamic type MapElem[K, V]. var CmpOptions cmp.Option func init() { CmpOptions = cmp.Options([]cmp.Option{ cmp.Transformer("collectionElementsRaw", func(v transformerForCmp) any { return v.transformForCmp() }), }) } // transformerForCmp is a helper interface implemented by both `Set` and `Map` // types, to work around the fact that go-cmp does all its work with reflection // and thus cannot rely on the static type information from the type // parameters. type transformerForCmp interface { transformForCmp() any } func (s Set[T]) transformForCmp() any { ret := make(map[any]any, s.Len()) // It's okay to access the keys here because this package is allowed to // depend on its own implementation details. for k, v := range s.members { ret[k] = v } return ret } func (m Map[K, V]) transformForCmp() any { ret := make(map[any]any, m.Len()) // It's okay to access the keys here because this package is allowed to // depend on its own implementation details. for k, v := range m.elems { ret[k] = v } return ret }