# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: api/v3/api_proto/users.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
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
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from google.api import field_behavior_pb2 as google_dot_api_dot_field__behavior__pb2
from google.api import resource_pb2 as google_dot_api_dot_resource__pb2
from api.v3.api_proto import user_objects_pb2 as api_dot_v3_dot_api__proto_dot_user__objects__pb2
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x61pi/v3/api_proto/users.proto\x12\x0bmonorail.v3\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a#api/v3/api_proto/user_objects.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\":\n\x0eGetUserRequest\x12(\n\x04name\x18\x01 \x01(\tB\x1a\xfa\x41\x14\n\x12\x61pi.crbug.com/User\xe0\x41\x02\"A\n\x14\x42\x61tchGetUsersRequest\x12)\n\x05names\x18\x01 \x03(\tB\x1a\xfa\x41\x14\n\x12\x61pi.crbug.com/User\xe0\x41\x02\"9\n\x15\x42\x61tchGetUsersResponse\x12 \n\x05users\x18\x01 \x03(\x0b\x32\x11.monorail.v3.User\"\x86\x01\n\x11UpdateUserRequest\x12;\n\x04user\x18\x01 \x01(\x0b\x32\x11.monorail.v3.UserB\x1a\xe0\x41\x02\xfa\x41\x14\n\x12\x61pi.crbug.com/User\x12\x34\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x03\xe0\x41\x02\"D\n\x12StarProjectRequest\x12.\n\x07project\x18\x01 \x01(\tB\x1d\xfa\x41\x17\n\x15\x61pi.crbug.com/Project\xe0\x41\x02\"F\n\x14UnStarProjectRequest\x12.\n\x07project\x18\x01 \x01(\tB\x1d\xfa\x41\x17\n\x15\x61pi.crbug.com/Project\xe0\x41\x02\"l\n\x17ListProjectStarsRequest\x12*\n\x06parent\x18\x01 \x01(\tB\x1a\xfa\x41\x14\n\x12\x61pi.crbug.com/User\xe0\x41\x02\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"d\n\x18ListProjectStarsResponse\x12/\n\rproject_stars\x18\x01 \x03(\x0b\x32\x18.monorail.v3.ProjectStar\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t2\xde\x03\n\x05Users\x12;\n\x07GetUser\x12\x1b.monorail.v3.GetUserRequest\x1a\x11.monorail.v3.User\"\x00\x12X\n\rBatchGetUsers\x12!.monorail.v3.BatchGetUsersRequest\x1a\".monorail.v3.BatchGetUsersResponse\"\x00\x12\x41\n\nUpdateUser\x12\x1e.monorail.v3.UpdateUserRequest\x1a\x11.monorail.v3.User\"\x00\x12J\n\x0bStarProject\x12\x1f.monorail.v3.StarProjectRequest\x1a\x18.monorail.v3.ProjectStar\"\x00\x12L\n\rUnStarProject\x12!.monorail.v3.UnStarProjectRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x61\n\x10ListProjectStars\x12$.monorail.v3.ListProjectStarsRequest\x1a%.monorail.v3.ListProjectStarsResponse\"\x00\x42#Z!infra/monorailv2/api/v3/api_protob\x06proto3')

_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'api.v3.api_proto.users_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'Z!infra/monorailv2/api/v3/api_proto'
  _GETUSERREQUEST.fields_by_name['name']._options = None
  _GETUSERREQUEST.fields_by_name['name']._serialized_options = b'\372A\024\n\022api.crbug.com/User\340A\002'
  _BATCHGETUSERSREQUEST.fields_by_name['names']._options = None
  _BATCHGETUSERSREQUEST.fields_by_name['names']._serialized_options = b'\372A\024\n\022api.crbug.com/User\340A\002'
  _UPDATEUSERREQUEST.fields_by_name['user']._options = None
  _UPDATEUSERREQUEST.fields_by_name['user']._serialized_options = b'\340A\002\372A\024\n\022api.crbug.com/User'
  _UPDATEUSERREQUEST.fields_by_name['update_mask']._options = None
  _UPDATEUSERREQUEST.fields_by_name['update_mask']._serialized_options = b'\340A\002'
  _STARPROJECTREQUEST.fields_by_name['project']._options = None
  _STARPROJECTREQUEST.fields_by_name['project']._serialized_options = b'\372A\027\n\025api.crbug.com/Project\340A\002'
  _UNSTARPROJECTREQUEST.fields_by_name['project']._options = None
  _UNSTARPROJECTREQUEST.fields_by_name['project']._serialized_options = b'\372A\027\n\025api.crbug.com/Project\340A\002'
  _LISTPROJECTSTARSREQUEST.fields_by_name['parent']._options = None
  _LISTPROJECTSTARSREQUEST.fields_by_name['parent']._serialized_options = b'\372A\024\n\022api.crbug.com/User\340A\002'
  _GETUSERREQUEST._serialized_start=205
  _GETUSERREQUEST._serialized_end=263
  _BATCHGETUSERSREQUEST._serialized_start=265
  _BATCHGETUSERSREQUEST._serialized_end=330
  _BATCHGETUSERSRESPONSE._serialized_start=332
  _BATCHGETUSERSRESPONSE._serialized_end=389
  _UPDATEUSERREQUEST._serialized_start=392
  _UPDATEUSERREQUEST._serialized_end=526
  _STARPROJECTREQUEST._serialized_start=528
  _STARPROJECTREQUEST._serialized_end=596
  _UNSTARPROJECTREQUEST._serialized_start=598
  _UNSTARPROJECTREQUEST._serialized_end=668
  _LISTPROJECTSTARSREQUEST._serialized_start=670
  _LISTPROJECTSTARSREQUEST._serialized_end=778
  _LISTPROJECTSTARSRESPONSE._serialized_start=780
  _LISTPROJECTSTARSRESPONSE._serialized_end=880
  _USERS._serialized_start=883
  _USERS._serialized_end=1361
# @@protoc_insertion_point(module_scope)
