35 lines
1005 B
Go
35 lines
1005 B
Go
![]() |
package cty
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
)
|
||
|
|
||
|
type collectionTypeImpl interface {
|
||
|
ElementType() Type
|
||
|
}
|
||
|
|
||
|
// IsCollectionType returns true if the given type supports the operations
|
||
|
// that are defined for all collection types.
|
||
|
func (t Type) IsCollectionType() bool {
|
||
|
_, ok := t.typeImpl.(collectionTypeImpl)
|
||
|
return ok
|
||
|
}
|
||
|
|
||
|
// ElementType returns the element type of the receiver if it is a collection
|
||
|
// type, or panics if it is not. Use IsCollectionType first to test whether
|
||
|
// this method will succeed.
|
||
|
func (t Type) ElementType() Type {
|
||
|
if ct, ok := t.typeImpl.(collectionTypeImpl); ok {
|
||
|
return ct.ElementType()
|
||
|
}
|
||
|
panic(errors.New("not a collection type"))
|
||
|
}
|
||
|
|
||
|
// ElementCallback is a callback type used for iterating over elements of
|
||
|
// collections and attributes of objects.
|
||
|
//
|
||
|
// The types of key and value depend on what type is being iterated over.
|
||
|
// Return true to stop iterating after the current element, or false to
|
||
|
// continue iterating.
|
||
|
type ElementCallback func(key Value, val Value) (stop bool)
|