// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

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

package mbr

import "fmt"

const (
	_OSType_name_0 = "FAT32"
	_OSType_name_1 = "GPTProtectiveUEFISystemPartition"
)

var (
	_OSType_index_0 = [...]uint8{0, 5}
	_OSType_index_1 = [...]uint8{0, 13, 32}
)

func (i OSType) String() string {
	switch {
	case i == 11:
		return _OSType_name_0
	case 238 <= i && i <= 239:
		i -= 238
		return _OSType_name_1[_OSType_index_1[i]:_OSType_index_1[i+1]]
	default:
		return fmt.Sprintf("OSType(%d)", i)
	}
}
