// Copyright 2021 The gVisor Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at //
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Code generated by "stringer -type Hook ."; DO NOT EDIT.

package stack

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[Prerouting-0]
	_ = x[Input-1]
	_ = x[Forward-2]
	_ = x[Output-3]
	_ = x[Postrouting-4]
	_ = x[NumHooks-5]
}

const _Hook_name = "PreroutingInputForwardOutputPostroutingNumHooks"

var _Hook_index = [...]uint8{0, 10, 15, 22, 28, 39, 47}

func (i Hook) String() string {
	if i >= Hook(len(_Hook_index)-1) {
		return "Hook(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _Hook_name[_Hook_index[i]:_Hook_index[i+1]]
}
