// Code generated by "stringer -type=ResourceInstanceStatus resource_instance.go"; DO NOT EDIT.

package hooks

import "strconv"

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[ResourceInstanceStatusInvalid-0]
	_ = x[ResourceInstancePending-46]
	_ = x[ResourceInstanceRefreshing-114]
	_ = x[ResourceInstanceRefreshed-82]
	_ = x[ResourceInstancePlanning-112]
	_ = x[ResourceInstancePlanned-80]
	_ = x[ResourceInstanceApplying-97]
	_ = x[ResourceInstanceApplied-65]
	_ = x[ResourceInstanceErrored-69]
}

const (
	_ResourceInstanceStatus_name_0 = "ResourceInstanceStatusInvalid"
	_ResourceInstanceStatus_name_1 = "ResourceInstancePending"
	_ResourceInstanceStatus_name_2 = "ResourceInstanceApplied"
	_ResourceInstanceStatus_name_3 = "ResourceInstanceErrored"
	_ResourceInstanceStatus_name_4 = "ResourceInstancePlanned"
	_ResourceInstanceStatus_name_5 = "ResourceInstanceRefreshed"
	_ResourceInstanceStatus_name_6 = "ResourceInstanceApplying"
	_ResourceInstanceStatus_name_7 = "ResourceInstancePlanning"
	_ResourceInstanceStatus_name_8 = "ResourceInstanceRefreshing"
)

func (i ResourceInstanceStatus) String() string {
	switch {
	case i == 0:
		return _ResourceInstanceStatus_name_0
	case i == 46:
		return _ResourceInstanceStatus_name_1
	case i == 65:
		return _ResourceInstanceStatus_name_2
	case i == 69:
		return _ResourceInstanceStatus_name_3
	case i == 80:
		return _ResourceInstanceStatus_name_4
	case i == 82:
		return _ResourceInstanceStatus_name_5
	case i == 97:
		return _ResourceInstanceStatus_name_6
	case i == 112:
		return _ResourceInstanceStatus_name_7
	case i == 114:
		return _ResourceInstanceStatus_name_8
	default:
		return "ResourceInstanceStatus(" + strconv.FormatInt(int64(i), 10) + ")"
	}
}
