// Code generated by protoc-gen-go.
// source: app.proto
// DO NOT EDIT!

/*
Package app is a generated protocol buffer package.

It is generated from these files:
	app.proto

It has these top-level messages:
*/
package app

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
const _ = proto.ProtoPackageIsVersion1

type ExitCode int32

const (
	ExitCode_Success ExitCode = 0
	// Emergency is the exit code if main logs at emergency level
	ExitCode_Emergency ExitCode = 1
	// Usage is the exit code if the usage function was invoked
	ExitCode_Usage ExitCode = 2
)

var ExitCode_name = map[int32]string{
	0: "Success",
	1: "Emergency",
	2: "Usage",
}
var ExitCode_value = map[string]int32{
	"Success":   0,
	"Emergency": 1,
	"Usage":     2,
}

func (x ExitCode) String() string {
	return proto.EnumName(ExitCode_name, int32(x))
}
func (ExitCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }

func init() {
	proto.RegisterEnum("app.ExitCode", ExitCode_name, ExitCode_value)
}

var fileDescriptor0 = []byte{
	// 95 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4c, 0x2c, 0x28, 0xd0,
	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x06, 0x32, 0xb5, 0x0c, 0xb9, 0x38, 0x5c, 0x2b, 0x32,
	0x4b, 0x9c, 0xf3, 0x53, 0x52, 0x85, 0xb8, 0xb9, 0xd8, 0x83, 0x4b, 0x93, 0x93, 0x53, 0x8b, 0x8b,
	0x05, 0x18, 0x84, 0x78, 0xb9, 0x38, 0x5d, 0x73, 0x53, 0x8b, 0xd2, 0x53, 0xf3, 0x92, 0x2b, 0x05,
	0x18, 0x85, 0x38, 0xb9, 0x58, 0x43, 0x8b, 0x13, 0xd3, 0x53, 0x05, 0x98, 0x92, 0xd8, 0xc0, 0xda,
	0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x22, 0xe1, 0x05, 0x4b, 0x00, 0x00, 0x00,
}
