| 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)) |
| } |
| } |