# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/storage_path.proto
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x63hromiumos/storage_path.proto\x12\nchromiumos\"\x89\x01\n\x0bStoragePath\x12\x33\n\thost_type\x18\x01 \x01(\x0e\x32 .chromiumos.StoragePath.HostType\x12\x0c\n\x04path\x18\x02 \x01(\t\"7\n\x08HostType\x12\x18\n\x14HOSTTYPE_UNSPECIFIED\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x06\n\x02GS\x10\x02\x42\x33Z1go.chromium.org/chromiumos/config/go;storage_pathb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chromiumos.storage_path_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'Z1go.chromium.org/chromiumos/config/go;storage_path'
  _globals['_STORAGEPATH']._serialized_start=46
  _globals['_STORAGEPATH']._serialized_end=183
  _globals['_STORAGEPATH_HOSTTYPE']._serialized_start=128
  _globals['_STORAGEPATH_HOSTTYPE']._serialized_end=183
# @@protoc_insertion_point(module_scope)
