# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: api/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 api.api_proto import user_objects_pb2 as api_dot_api__proto_dot_user__objects__pb2
from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19\x61pi/api_proto/users.proto\x12\x08monorail\x1a api/api_proto/user_objects.proto\x1a\x1a\x61pi/api_proto/common.proto\"R\n\x1aListReferencedUsersRequest\x12\x0e\n\x06\x65mails\x18\x02 \x03(\t\x12$\n\tuser_refs\x18\x03 \x03(\x0b\x32\x11.monorail.UserRef\"<\n\x1bListReferencedUsersResponse\x12\x1d\n\x05users\x18\x01 \x03(\x0b\x32\x0e.monorail.User\"5\n\x0eGetUserRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\"<\n\x15GetMembershipsRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\"?\n\x16GetMembershipsResponse\x12%\n\ngroup_refs\x18\x01 \x03(\x0b\x32\x11.monorail.UserRef\"=\n\x16GetSavedQueriesRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\"F\n\x17GetSavedQueriesResponse\x12+\n\rsaved_queries\x18\x01 \x03(\x0b\x32\x14.monorail.SavedQuery\">\n\x17GetUserStarCountRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\".\n\x18GetUserStarCountResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\"G\n\x0fStarUserRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12\x0f\n\x07starred\x18\x03 \x01(\x08\"&\n\x10StarUserResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\"7\n\x1fSetExpandPermsPreferenceRequest\x12\x14\n\x0c\x65xpand_perms\x18\x02 \x01(\x08\"\"\n SetExpandPermsPreferenceResponse\":\n\x13GetUserPrefsRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\">\n\x14GetUserPrefsResponse\x12&\n\x05prefs\x18\x01 \x03(\x0b\x32\x17.monorail.UserPrefValue\"b\n\x13SetUserPrefsRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12&\n\x05prefs\x18\x03 \x03(\x0b\x32\x17.monorail.UserPrefValue\"\x16\n\x14SetUserPrefsResponse\"*\n\x19InviteLinkedParentRequest\x12\r\n\x05\x65mail\x18\x02 \x01(\t\"\x1c\n\x1aInviteLinkedParentResponse\")\n\x18\x41\x63\x63\x65ptLinkedChildRequest\x12\r\n\x05\x65mail\x18\x02 \x01(\t\"\x1b\n\x19\x41\x63\x63\x65ptLinkedChildResponse\"\\\n\x15UnlinkAccountsRequest\x12!\n\x06parent\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12 \n\x05\x63hild\x18\x03 \x01(\x0b\x32\x11.monorail.UserRef\"\x18\n\x16UnlinkAccountsResponse\"?\n\x17GetUsersProjectsRequest\x12$\n\tuser_refs\x18\x01 \x03(\x0b\x32\x11.monorail.UserRef\"J\n\x18GetUsersProjectsResponse\x12.\n\x0eusers_projects\x18\x01 \x03(\x0b\x32\x16.monorail.UserProjects\"#\n\x12\x45xpungeUserRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\"\x15\n\x13\x45xpungeUserResponse2\xd3\t\n\x05Users\x12\x35\n\x07GetUser\x12\x18.monorail.GetUserRequest\x1a\x0e.monorail.User\"\x00\x12\x64\n\x13ListReferencedUsers\x12$.monorail.ListReferencedUsersRequest\x1a%.monorail.ListReferencedUsersResponse\"\x00\x12U\n\x0eGetMemberships\x12\x1f.monorail.GetMembershipsRequest\x1a .monorail.GetMembershipsResponse\"\x00\x12X\n\x0fGetSavedQueries\x12 .monorail.GetSavedQueriesRequest\x1a!.monorail.GetSavedQueriesResponse\"\x00\x12[\n\x10GetUserStarCount\x12!.monorail.GetUserStarCountRequest\x1a\".monorail.GetUserStarCountResponse\"\x00\x12\x43\n\x08StarUser\x12\x19.monorail.StarUserRequest\x1a\x1a.monorail.StarUserResponse\"\x00\x12O\n\x0cGetUserPrefs\x12\x1d.monorail.GetUserPrefsRequest\x1a\x1e.monorail.GetUserPrefsResponse\"\x00\x12O\n\x0cSetUserPrefs\x12\x1d.monorail.SetUserPrefsRequest\x1a\x1e.monorail.SetUserPrefsResponse\"\x00\x12s\n\x18SetExpandPermsPreference\x12).monorail.SetExpandPermsPreferenceRequest\x1a*.monorail.SetExpandPermsPreferenceResponse\"\x00\x12\x61\n\x12InviteLinkedParent\x12#.monorail.InviteLinkedParentRequest\x1a$.monorail.InviteLinkedParentResponse\"\x00\x12^\n\x11\x41\x63\x63\x65ptLinkedChild\x12\".monorail.AcceptLinkedChildRequest\x1a#.monorail.AcceptLinkedChildResponse\"\x00\x12U\n\x0eUnlinkAccounts\x12\x1f.monorail.UnlinkAccountsRequest\x1a .monorail.UnlinkAccountsResponse\"\x00\x12[\n\x10GetUsersProjects\x12!.monorail.GetUsersProjectsRequest\x1a\".monorail.GetUsersProjectsResponse\"\x00\x12L\n\x0b\x45xpungeUser\x12\x1c.monorail.ExpungeUserRequest\x1a\x1d.monorail.ExpungeUserResponse\"\x00\x42)Z\'infra/monorailv2/api/api_proto;monorailb\x06proto3')

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

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'Z\'infra/monorailv2/api/api_proto;monorail'
  _LISTREFERENCEDUSERSREQUEST._serialized_start=101
  _LISTREFERENCEDUSERSREQUEST._serialized_end=183
  _LISTREFERENCEDUSERSRESPONSE._serialized_start=185
  _LISTREFERENCEDUSERSRESPONSE._serialized_end=245
  _GETUSERREQUEST._serialized_start=247
  _GETUSERREQUEST._serialized_end=300
  _GETMEMBERSHIPSREQUEST._serialized_start=302
  _GETMEMBERSHIPSREQUEST._serialized_end=362
  _GETMEMBERSHIPSRESPONSE._serialized_start=364
  _GETMEMBERSHIPSRESPONSE._serialized_end=427
  _GETSAVEDQUERIESREQUEST._serialized_start=429
  _GETSAVEDQUERIESREQUEST._serialized_end=490
  _GETSAVEDQUERIESRESPONSE._serialized_start=492
  _GETSAVEDQUERIESRESPONSE._serialized_end=562
  _GETUSERSTARCOUNTREQUEST._serialized_start=564
  _GETUSERSTARCOUNTREQUEST._serialized_end=626
  _GETUSERSTARCOUNTRESPONSE._serialized_start=628
  _GETUSERSTARCOUNTRESPONSE._serialized_end=674
  _STARUSERREQUEST._serialized_start=676
  _STARUSERREQUEST._serialized_end=747
  _STARUSERRESPONSE._serialized_start=749
  _STARUSERRESPONSE._serialized_end=787
  _SETEXPANDPERMSPREFERENCEREQUEST._serialized_start=789
  _SETEXPANDPERMSPREFERENCEREQUEST._serialized_end=844
  _SETEXPANDPERMSPREFERENCERESPONSE._serialized_start=846
  _SETEXPANDPERMSPREFERENCERESPONSE._serialized_end=880
  _GETUSERPREFSREQUEST._serialized_start=882
  _GETUSERPREFSREQUEST._serialized_end=940
  _GETUSERPREFSRESPONSE._serialized_start=942
  _GETUSERPREFSRESPONSE._serialized_end=1004
  _SETUSERPREFSREQUEST._serialized_start=1006
  _SETUSERPREFSREQUEST._serialized_end=1104
  _SETUSERPREFSRESPONSE._serialized_start=1106
  _SETUSERPREFSRESPONSE._serialized_end=1128
  _INVITELINKEDPARENTREQUEST._serialized_start=1130
  _INVITELINKEDPARENTREQUEST._serialized_end=1172
  _INVITELINKEDPARENTRESPONSE._serialized_start=1174
  _INVITELINKEDPARENTRESPONSE._serialized_end=1202
  _ACCEPTLINKEDCHILDREQUEST._serialized_start=1204
  _ACCEPTLINKEDCHILDREQUEST._serialized_end=1245
  _ACCEPTLINKEDCHILDRESPONSE._serialized_start=1247
  _ACCEPTLINKEDCHILDRESPONSE._serialized_end=1274
  _UNLINKACCOUNTSREQUEST._serialized_start=1276
  _UNLINKACCOUNTSREQUEST._serialized_end=1368
  _UNLINKACCOUNTSRESPONSE._serialized_start=1370
  _UNLINKACCOUNTSRESPONSE._serialized_end=1394
  _GETUSERSPROJECTSREQUEST._serialized_start=1396
  _GETUSERSPROJECTSREQUEST._serialized_end=1459
  _GETUSERSPROJECTSRESPONSE._serialized_start=1461
  _GETUSERSPROJECTSRESPONSE._serialized_end=1535
  _EXPUNGEUSERREQUEST._serialized_start=1537
  _EXPUNGEUSERREQUEST._serialized_end=1572
  _EXPUNGEUSERRESPONSE._serialized_start=1574
  _EXPUNGEUSERRESPONSE._serialized_end=1595
  _USERS._serialized_start=1598
  _USERS._serialized_end=2833
# @@protoc_insertion_point(module_scope)
