34 lines
1019 B
Go
34 lines
1019 B
Go
|
package addrs
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
// MoveEndpointKind represents the different kinds of object that a movable
|
||
|
// address can refer to.
|
||
|
type MoveEndpointKind rune
|
||
|
|
||
|
//go:generate go run golang.org/x/tools/cmd/stringer -type MoveEndpointKind
|
||
|
|
||
|
const (
|
||
|
// MoveEndpointModule indicates that a move endpoint either refers to
|
||
|
// an individual module instance or to all instances of a particular
|
||
|
// module call.
|
||
|
MoveEndpointModule MoveEndpointKind = 'M'
|
||
|
|
||
|
// MoveEndpointResource indicates that a move endpoint either refers to
|
||
|
// an individual resource instance or to all instances of a particular
|
||
|
// resource.
|
||
|
MoveEndpointResource MoveEndpointKind = 'R'
|
||
|
)
|
||
|
|
||
|
func absMoveableEndpointKind(addr AbsMoveable) MoveEndpointKind {
|
||
|
switch addr := addr.(type) {
|
||
|
case ModuleInstance, AbsModuleCall:
|
||
|
return MoveEndpointModule
|
||
|
case AbsResourceInstance, AbsResource:
|
||
|
return MoveEndpointResource
|
||
|
default:
|
||
|
// The above should be exhaustive for all AbsMoveable types.
|
||
|
panic(fmt.Sprintf("unsupported address type %T", addr))
|
||
|
}
|
||
|
}
|