diff --git a/api/main.proto b/api/main.proto index c56ac68..fdb99e7 100644 --- a/api/main.proto +++ b/api/main.proto @@ -77,6 +77,12 @@ service EveningDetective { get: "/teams/pdf" }; } + + rpc GetGraph(GetGraphReq) returns (GetGraphRsp) { + option (google.api.http) = { + get: "/graph" + }; + } } message PingReq {} @@ -179,3 +185,20 @@ message DownloadTeamsQrCodesFileReq {} message DownloadTeamsQrCodesFileRsp { bytes result = 1; } + +message GetGraphReq {} + +message GetGraphRsp { + repeated Node nodes = 1; + repeated Edge edges = 2; + + message Node { + int32 id = 1; + string label = 2; + } + message Edge { + int32 from = 1; + int32 to = 2; + string arrows = 3; + } +} diff --git a/data/story/story.json b/data/story/story.json index 016748f..ca6212e 100644 --- a/data/story/story.json +++ b/data/story/story.json @@ -1,324 +1 @@ -{ - "places": [ - { - "code": "ЛП-1", - "name": "Шезлонги", - "text": "Десяток аккуратно расставленных шезлонгов с пастельно-голубыми полосатыми матрасами, под цвет балетных пачек. Каркасы — из потемневшего от солёного воздуха тика, с небольшими табличками, указывающими номера кают. Утром они стоят пустые, лишь на некоторых остались следы вчерашнего вечера:\nНа одном — пустой бокал с подтаявшим дном, прилипший к подстаканнику. Внутри болтается синий бумажный зонтик.\nПод третьим шезлонгом, в тени, валяется небольшая розовая заколка-краб.\nВоздух пахнет речной водой, нагретым деревом и сладковатым ароматом засохшего коктейля. Утреннее солнце высветливает пылинки, кружащиеся в воздухе. Единственный свидетель утра — горничная Люба, которая сонно протирает матрасы тряпкой, напевая что-то себе под нос и поглядывая на дверь в бар, откуда доносятся звуки уборки." - }, - { - "code": "ЛП-2", - "name": "Бассейн", - "text": "Небольшой, но живописный бассейн в форме лебедя. Вода чуть мутновата от ночной прохлады, на поверхности плавает несколько опавших лепестков от цветочных композиций с вечеринки. По краям — синие пластиковые шезлонги и плетёные столики." - }, - { - "code": "ЛП-3", - "name": "Прохладительные напитки", - "text": "Небольшая стойка-бар под тентом у бассейна. За прилавком — ряды бутылок с яркими сиропами, содовой в сифонах и медный холодильник, густо покрытый конденсатом. Утром бар не работает, но на стойке остались следы вчерашней суеты." - }, - { - "code": "ТЗ", - "name": "Танцевальный зал", - "text": "Господа артисты, а теперь растяжка, девочки помогите, к нам гости.\nВас встречает Маргарита Станиславовна. \nПочему не в форме, вчера вы отлично танцевали с нами вместе.\nВы рассказываете события которые застали вас с первыми лучами солнца. \nЯ вчера была в том баре, И девочки там были, Этот мужчина в пиджаке за баром сидел, не нравится он мне, телефоном своим тыкал бармену в лицо, мне даже жалко мальчишку стало. А потом пришел этот мясник, злой весь пыхтел. Я чего заметила то, он меня каждый вечер танцевать зовет, а вчера с барменом поговорил, и пулей вылетел из бара." - }, - { - "code": "Р-1", - "name": "Ресторан «Феэте \u0026 Фуа-гра»", - "text": "Вас встречает высокий грузный мужчина лет 40. В белой форме, он уже накричал на двоих поваров за халатность.\nСемен Викторович? Конечно знаю - VIP клиент, холить и лелеять, целовать в жопу - приказ капитана. Был вчера, не самый приятный человек. Поел был даже весел. Когда ушел не знаю. Я отходил отнести в “Пуанты” десерт. \nВы просите поговорить с официантом который приносил вчера обед в каюту 323.\nГЕНА! Хороший парень. Его ещё нет. Весь вечер он был тут, а после за разбитую тарелку, он мыл посуду вместе с посудомойкой. Часов до 3 должны были тут быть." - }, - { - "code": "Т-1", - "name": "Туалет", - "text": "Все уделали, паразиты, а мне опять отмывай. Проклятый бар.\nОсмотрев комнату уже нельзя было понять что кому-то здесь было плохо, тётя Глаша тут уже все убрала." - }, - { - "code": "Б-1", - "name": "Бар «Пуанты вверх!»", - "text": "С утра бар закрыт, приглушённое освещение и тишина делают его похожим на театральные кулисы после спектакля. Стойка липкая от пролитых напитков, на её поверхности — засохшие круги от бокалов, рассыпанная соль, мятные палочки и крошки от орешков. Под стойкой, рядом с мусорным ведром, валяется смятая пачка сигарет «Ява» и один синий пластиковый зонтик для коктейлей." - }, - { - "code": "К", - "name": "Костюмерная", - "text": "Тесное, забитое до потолка стеллажами помещение. Повсюду висят пышные пачки, трико, перья и блестящие аксессуары. Пахнет нафталином, гримом и пудрой. На большом столе у зеркала — беспорядок: коробка с нитками и иголками, пустая упаковка от таблеток «от усталости ног» и распечатанная афиша вчерашнего выступления с автографом." - }, - { "code": "К-200", "name": "Каюта 200", "text": "Дверь закрыта." }, - { "code": "К-201", "name": "Каюта 201", "text": "Дверь закрыта." }, - { - "code": "К-202", - "name": "Каюта 202", - "text": "Вам открывает дверь невысокий пожилой мужчина. Он встречает вас широкой улыбкой. Из разговора вы узнаете, что с обеда он до полуночи был на верхней палубе и играл на аккордеоне. Парни наверное спят еще, тяжелый денек был." - }, - { "code": "К-203", "name": "Каюта 203", "text": "Дверь закрыта." }, - { - "code": "К-204", - "name": "Каюта 204", - "text": "Вы стучитесь в дверь, которая с тихим скрипом открывается. Из каюты повеяло мягким цветочным ароматом. Вы проходите в комнату, никого нет. Осмотревшись, Вы замечаете пачку фотографий на столе среди которых вывстречаете и фото вчерашнего вечера.", - "applications": [{ "name": "Фото" }] - }, - { "code": "К-205", "name": "Каюта 205", "text": "Дверь закрыта." }, - { - "code": "К-206", - "name": "Каюта 206", - "text": "На двери висит расписание занятий в танцевальном зале и сейчас Маргарита Станиславовна должна быть там." - }, - { - "code": "К-207", - "name": "Каюта 207", - "text": "Около каюты Вы встречаете молодую девушку, это же она танцевала вчера под звёздами. В каюте вы рассказываете что произошло и что ей грозит тюрьма. \nНет! Я ничего не крала! - она начинает плакать, - Я не самый хороший человек но я не нарушаю закон. Спросите руководителя, девчонок, я никогда…\nЭто дело кажется вам странным а почему-то вы верите, девушке. Хладнокровно украсть дорогой телефон, и так неудачно спрятать, что горничная находит его даже при легкой уборке.\nВчера всё утро мы репетировали, а после показывали историю про париж 19 века. После был мастер класс. Вечером как обычно с девчонками заглянули в бар, Алинке там бармен Толя нравится. Там были до половины десятого, а потом на Лебединую палубу пошли, там танцы вчера были и звезды красивые, Соня нас даже сфотографировала.\nВы с задумчивым видом получаете разрешение взять буклеты, кладете их в карман и покидаете каюту.", - "applications": [{ "name": "Карта" }] - }, - { - "code": "К-208", - "name": "Каюта 208", - "text": "Дверь закрыта, Николай Степанович обычно в это время уже на верхней палубе играет в шахматы, поэтому вы не удивлены." - }, - { - "code": "К-209", - "name": "Каюта 209", - "text": "Убирайтесь прочь! - низкий голос из каюты." - }, - { - "code": "К-210", - "name": "Каюта 210", - "text": "Каюта закрыта, капитан на мостике." - }, - { - "code": "К-211", - "name": "Каюта 211", - "text": "Встретив старпома в коридоре, он разрешает вам исследовать его каюту, он дает вам ключи и удаляется. Идеальный порядок, пахнет свежей краской, типографской краской и металлом. Каюта похожа на кабинет штурмана. На столе — стопка уставов, навигационные приборы, распечатанный график вахт и телескоп в чехле. На стене — астрономическая карта звёздного неба, схема устройства теплохода и диплом мореходного училища. На полке — потёртый блокнот со стихами о море и лейкопластырь. Возле иллюминатора на штативе установлен телескоп, направленный на звёзды. В ящике стола, под схемами, лежит секретная шифровка о розыске контрабандистов, а на её полях карандашом написано: «Груз №7 — бананы? Проверить по накладным. Капитан не слушает...». Рядом валяется пузырёк с антигистаминными таблетками." - }, - { - "code": "Р-2", - "name": "Ресторан «Гранд батон»", - "text": "Более скромный, чем «Фуэте \u0026 Фуа-гра», но уютный ресторан на третьей палубе. Утром здесь подают завтрак: запах кофе, свежей выпечки и масла. На столиках — остатки еды, сморщенные салфетки и меню с пятном от варенья. За стойкой официанты суетятся, разнося подносы." - }, - { - "code": "И", - "name": "Игровая комната «Золотая рыбка»", - "text": "Небольшая комната с игрушками, столом для рисования и несколькими стеллажами книг за кафедрой. Похоже руководитель комнаты еще не пришел. За кафедрой вы находите засаленный учебник по мореходству и пачку читательских билетов. В центре сидит девочка и строит башню из металлического конструктора. На полу валяется плюшевая пчёлка и раскраска с кораблём. В углу стоит жестяная коробка с надписью «Юный архитектор». На ваши вопросы она не отвечает." - }, - { - "code": "Т-2", - "name": "Туалет", - "text": "Чисто, пахнет хлоркой. На полу — мокрый след от швабры. Ведро для мусора переполнено смятыми бумажками и обёртками от леденцов." - }, - { - "code": "Б-2", - "name": "Бар «Гранд шот»", - "text": "У барной стойки никого нет. На столешнице табличка с надписью:\nРаботаем с 12:00" - }, - { - "code": "А", - "name": "Администрация", - "text": "Да-да, я знаю про трагедию, а Вы тот самый детектив о котором все только и говорят? Очень приятно Валерия Сергеевна Сомова, администратор.\nНа полках много папок но все расставлены в идеальном порядке по годам и рейсам, кажется ошибок быть не может.\nВот вам список пассажиров, в этот раз не все каюты заняты, одну даже выкупили но не поплыли с нами, я там отметила. Все пассажиры у нас хорошие вежливые. А я вчера вечером уже спала, режим, да и остановка сегодня большая работы много. А теперь еще и эта кража. Больше ничем помочь не могу.", - "applications": [{ "name": "Список пассажиров" }] - }, - { - "code": "К-300", - "name": "Каюта 300", - "text": "Проходите, садитесь.\nВ её каюте пахнет духами и воспоминаниями. На столе — программки старых балетов, фото в роли Жизели на столе.\nЭто я. Хорошие были времена. А вот в кардебалете Витя Кораблев он с нами плывет. Хороший парень был. Связался с плохой компанией. \nНа фотографии вы видите шеф-повара. Моложе худее, но это точно он!\nЕго в 90-е поймали на хранении наркотиков, они называли его “скорость”. Красивое название, вы не находите? Тогда и пропал." - }, - { - "code": "К-301", - "name": "Каюта 301", - "text": "Я думаю это инопланетяне, даже Анжела поверила. Вчера такая вспышка была, и она двигалась Дима подтвердит. Зачем им телефон я не знаю, могли же кого-нибудь украсть, А все пассажиры на месте?" - }, - { - "code": "К-302", - "name": "Каюта 302", - "text": "Кто там? Мне папа запрещает открывать незнакомым, а он ещё спит." - }, - { "code": "К-303", "name": "Каюта 303", "text": "Закрыто." }, - { - "code": "К-304", - "name": "Каюта 304", - "text": "На стук никто не отвечает, прислушавшись Вы слышите легкое сопение и бормотание.\nКакая хорошенькая девочка. … Как так напиться можно было, негодяй! … Это же совсем не ваше дело, Вам танцевать нужно, а не пирожки печь." - }, - { - "code": "К-305", - "name": "Каюта 305", - "text": "Ты видел её глаза! Теперь то она точно поверит в НЛО! Такая вспышка интересная получилась, да все теперь поверят.\nСлышится радостный разговор из каюты." - }, - { - "code": "К-306", - "name": "Каюта 306", - "text": "Здравствуйте, я вчера на Лебединой с дочкой весь вечер была. Салюты огни было красиво. Мужчину про которого вы говорите я там не видела. Знаете что странно было. Вчера шеф сильно наорал на бармена на коктейльном столике. Он принес ящик бананов, а другой забрал точно такой же. Я запомнила потому что Настюшка сильно напугалась. А в остальном вечер отличный был." - }, - { - "code": "К-307", - "name": "Каюта 307", - "text": "Здравствуйте, это вы занимаетесь этим делом? У меня есть несколько зацепок. Вчера около 22:00 часов была вспышка очень близко к кораблю, и тогда же и исчез телефон. Это инопланетяне, им нужны наши технологии, они изучают нас! Я раньше не верила, но факты!!!" - }, - { - "code": "К-308", - "name": "Каюта 308", - "text": "Эту каюту Вы уже видели. Тут живет отличный мальчуган, внук Григория Семеновича и Людмилы Аркадьевны, скорее всего где-то с ними сейчас." - }, - { - "code": "К-309", - "name": "Каюта 309", - "text": "Здрасте, свою комнату обыскивать не позволю!!! Я завуч, я на вас жаловаться буду!\nВы пытаетесь объяснить ситуацию, и что обыскивать её вы не собираетесь. Но толку было бы больше рисуй вы на воде ровные квадраты вилами.\nВорует прислуга, они уже украли мою статуэтку и очки! Я найду на них и Вас управу.\nОчень вежливо извинившись вы уходите. Очки же у нее на цепочке, о статуэтка на полочке для ключей, увы сказать ей это не получится." - }, - { - "code": "К-310", - "name": "Каюта 310", - "text": "Дверь заперта, а около ручки очень аккуратно приклеен листок с кружевной надписью: “Греем косточки, ищите на верхней палубе”." - }, - { - "code": "К-311", - "name": "Каюта 311", - "text": "По коридору быстрым шагом несется Станислав с огромной клетчатой сумкой, кажется скоро его остановка. Вы кричите ему в след, но он уже Вас не слышит." - }, - { - "code": "К-312", - "name": "Каюта 312", - "text": "Виктор Павлович с которым вы познакомились еще в очереди на посадку очень рад вас видеть.\nПроходите, дорогой друг. \nОн приглашает вас в каюту и быстро закрывает дверь. В то же мгновение улыбка на его лице исчезла.\nНас нашли. Это они, наводят суету чтобы нас поймать. Я не могу сказать за что нас ищут, это государственная тайна.\nЕго жена, Людмила Ивановна, насторожено посмотрела на дверь. \nПосле пятиминутной беседы но уже шепотом, вы покидаете каюту, с боязнью что за 3 дня путешествия вы так обмякли что не заметили шпионов прямо под носом." - }, - { - "code": "К-313", - "name": "Каюта 313", - "text": "Уютный хаос из книг. На столе — «Три мушкетёра», очки и клетка с канарейкой Кешей. На тумбочке — стопки книг с закладками. На полу стоит корзинка с пряжей и следы птичьего корма.\nЯ вчера вечером ходила по коридору, уснуть долго не могла из-за музыки сверху. И видела как мальчишка зашел в каюту Катеньки в белой рубашке был и брюках. Еще шапочка была. Я с катенькой болтаю иногда, она молодец хочет в большой пойти, на пробы едет. Ой, я же забыла ей рассказать что вор был.\nВы обещаете что всё передадите и уходите." - }, - { - "code": "К-314", - "name": "Каюта 314", - "text": "Доносится громкий женский храп! Не стоит будить такую женщину." - }, - { - "code": "К-315", - "name": "Каюта 315", - "text": "Я ничего не крал! Я просто погоду смотрел! Я не знаю вашего … ну того обокраденного.\nДверь он так и не открыл, скрывает он что-то." - }, - { - "code": "К-316", - "name": "Каюта 316", - "text": "Из двери доносится легкий запах канифоли.\nЗдравствуйте, проходите. Я про вас слышал. Вернее читал в газете. Тогда в лагере мой ребенок отдыхал. Но он ничего не знает я не рассказывал, но спасибо огромное. \nОн крепко жмет Вашу руку.\nВы видели эту молодежь верят в привидения, и ползают везде. Я их даже в запретной зоне видел. А туда же нельзя. Ух руки бы им поотрывать. Столько радиоэлементов на свои глупости тратят, и откуда деньги!" - }, - { - "code": "К-317", - "name": "Каюта 317", - "text": "Дверь закрыта. На стук никто не отвечает." - }, - { - "code": "К-318", - "name": "Каюта телохранителя Гриши", - "text": "Ты это куда, сердешный? Я тут. А там никого нет.\nПрогремел мужчина у 320 каюты." - }, - { "code": "К-319", "name": "Каюта 319", "text": "Закрыто." }, - { - "code": "К-320", - "name": "Каюта 320", - "text": "У двери вас встречает охранник. Обыскав вас он стучит в дверь каюты. Вам открывает мужчина плотного телосложения в водолазке и толстой цепи. \nЗаходите, слышал конечно, весь корабль гудит. Я даже хотел отправить Гришу отправить искать, но администратор запретила, говорит не законно это. Не то чтобы я закона боюсь, но паники нам тут не надо.\nОн как то зло улыбнулся.\nЯ вам вот что скажу мои соседи - очень подозрительные ребята, из 303 постоянно что-то бормочет себе под нос. Поехавший, зуб даю. Гриша его уже дважды сломать хотел. А больше ничего подозрительного не видел, да я и не ищу, больше не ищу.\nОн ухмыльнулся и расплылся в холодной улыбке." - }, - { - "code": "К-321", - "name": "Каюта 321", - "text": "Ключ от этой двери вам достать не получилось, но Вас уверяют что там никого нет уже давно, и пыль в щели под дверью намекает на тоже." - }, - { - "code": "К-322", - "name": "Каюта 322", - "text": "Заперта на ключ. Из-под двери тянет запахом старой ткани и пыли. Если заглянуть в замочную скважину, можно увидеть стопки постельного белья и ведро с тряпками. Видимо, используется горничными для хранения запасов." - }, - { - "code": "К-323", - "name": "Каюта 323", - "text": "Просторная VIP каюта отличается от вашей только расположением кровати, и наличием чайника с микроволновкой. \n“Всё утро я играл в шахматы с Николаем Степанычем пока не проснулся Дмитрий Федотыч и я любезно уступил ему место на верхней палубе. После читал здесь “Записки юного врача” - он указал на книгу лежащую на столе рядом с буклетами.\n“Обед я заказал в каюту официант, который приносил мне блюда был очень любопытный все про телефон спрашивал, где я его купил и сколько стоит” - Семен закурил, руки его тряслись все сильнее и уже от злости.\nУбью ворюгу! Через 2 часа остановка там я и должен позвонить сыну. Вечером отужинав с Вами и нашей милой медсестрой, я проводил последнюю до её 400-ой каюты и пошел в бар пропустить стаканчик. Я был в баре, в том что на носу, остаток вечера, и точно помню мне пришло смс, где-то в 10 часов, от жены… не будем об этом. Я и много пить не собирался вчера. В итоге даже фарфорового друга обнимал в том же баре, только никому не говорите. Больше ничего не помню, проснулся думал проспал время звонка и потянулся за телефоном, дальше вы знаете.\nТолько он завершил свой рассказ, в дверь каюты кто-то постучался. \nВойдите.\nТётя Глаша взволнованно открыла дверь. Я случайно нашла ваш телефон в 207-ой. Вы забираете телефон: \n- Никому не говорите что нашли его.\nТелефон найден дело закрыто! Слишком просто. Вы убеждаете Семёна никому ничего не говорить пока Вы не разрешите. И направляетесь в 207-ую каюту [к-207].", - "applications": [{ "name": "Список смс" }] - }, - { - "code": "К-324", - "name": "Каюта 324", - "text": "Незаправленная кровать, выдает не самое спокойное утро, приняв холодный душ, Вы садитесь в кресло и начинаете вспоминать события вчерашнего дня. Прекрасный спектакль на первой палубе, со сцены три неотразимые молодые танцовщицы рассказывали дерзкую историю улиц ночного Парижа. Вкуснейший ужин в ресторане «Феэте \u0026 Фуа-гра» состоящий из 3 блюд прелестной компании Семёна Викторовича и Эльвиры Петровны. Волшебные танцы под звездами и целого импровизированного шоу от Екатерины (одной из участниц труппы театра). Вы были тут - прямо в центре преступления и в шаге от его предотвращения. Что ж, за дело, нужно опросить потерпевшего, он живет в каюте 323 [К-323]." - }, - { - "code": "К-325", - "name": "Каюта 325", - "text": "Тихая и неприметная. За дверью слышен звук радио и чье-то покашливание. Постучавшись, вы слышите пожилой мужской голос, это капитан:\nУходите, я отдыхаю!\nВидимо, Вы не вовремя." - }, - { - "code": "С", - "name": "Склад", - "text": "Прохладное помещение со стеллажами до потолка. Пахнет овощами, металлом и свежестью. В углу стоят ящики с надписью «Эквадор. Бананы.». На полу — следы грязи от ботинок и белый порошок, мука похоже. На стене висит график разгрузки и список поставок." - }, - { - "code": "М", - "name": "Медпункт", - "text": "Работа с 10:00 до 20:00. В экстренных ситуациях обращаться в каюту 400." - }, - { - "code": "К-400", - "name": "Каюта 400", - "text": "Дверь закрыта. Постучавшись в дверь вы слышите:\nБегу, бегу. Что случилось? Кто-то утонул?\nПока вы рассказываете ситуацию, глаза медсестры все больше теряют к ней интерес.\nКогда кто-то будет умирать, ну или хотя-бы пораниться, зовите. А пока я спать. Скоро смена." - }, - { - "code": "К-401", - "name": "Каюта 401", - "text": "На двери табличка “не беспокоить”. Ручка двери слегка покрылась пылью." - }, - { - "code": "К-402", - "name": "Каюта 402", - "text": "Сквозь замочную скважину ничего увидеть не получается. Взяв ключи у администратора вы открываете дверь. По всей комнате разбросаны обрывки каких-то бумаг. В мусорном ведре вы находите упаковку снотворного и пачку слабительного. На столе также рекламу агентства элитной недвижимости с пометками и журнал сотовых телефонов и надпись: “3 штуки”. В тумбочке вы находите паспорт на имя Виктора Кораблева и билет в “большой театр”." - }, - { - "code": "К-403", - "name": "Каюта 403", - "text": "Книга рецептов, фото семьи и расписание смен. На стене висит график готовки и список обязанностей с кучей пометок и советов. В углу стоит чемодан, а на вешалке 3 чистых выглаженных фартука. На тумбочке — два будильника и записка:\n\t“У тебя всё получится - мама и папа.”\nВы спрашиваете про вип гостей.\nУ нас много гостей, я знаю всех, но как-то особенно к ним не отношусь. Обслуживаю всех по высшему классу. Я хочу когда-нибудь стать шефом. Начальство довольно. Правда я еще не могу спорить с капитаном или шефом, опытом они меня побеждают многократно. Но я учусь. А вечером я был здесь перечитал книгу рецептов из рыбы, он будет сегодня, вчерашний хаос хорошо что закончился. Повара были раздражены этим инцидентом." - }, - { - "code": "К-404", - "name": "Что это?", - "text": "Каюта не найдена. И ее вы не отыщите её на корабле. Когда-то давно, конструктор забыл добавить ее в план." - }, - { - "code": "К-405", - "name": "Каюта 405", - "text": "Дверь открывает молодой крючковатый парень с красными глазами. Он пускает вас в каюту. На столе — форма официанта, книга «Как стать богатым» и фото матери и журнал открытый на странице с мобильными телефонами среди которых есть и модель которая пропала у вашего соседа. На стене висит расписание рейсов и мотивирующие цитаты. Под кроватью — ящик с деньгами и пустые упаковки от лекарств. На тумбочке — записка: «Завтра разгрузка. Не опоздать.». Увидев что вы осматриваете стол он прикрывает записку:\nЭто личное, не имеете права, вчера я помогал на кухне, таскал ящики с продуктами на кухню, да шеф позавчера объявил что сегодня будет день бананов и надо принести со склада 10 ящиков.\nПопрощавшись с парнем вы выходите из каюты, после того как дверь закрылась вы слышите как бумагу начинают рвать." - }, - { - "code": "К-406", - "name": "Каюта 406", - "text": "Дверь открыта, но внутри никого. На столике записка:\nЕсли вам нужна внеплановая уборка номера запишитесь в книгу. \nНа столе также вы находите вязание, фото сына-милиционера и коробку конфет «Дюшес». На стене висит график уборки. В углу стоит тележка с чистящими средствами и запасные перчатки.\nВ книге запросов вы находите записи:\nТуалет у бара на носу, пассажиру стало плохо\nКаюта 300, сменить постельное белье\nСклад, рассыпали муку\nКаюта 412, раздавлено печенье" - }, - { - "code": "К-407", - "name": "Каюта 407", - "text": "Дверь приоткрыта. Внутри пахнет свежим бельём и мылом. На кровати — свёрнутые полотенца для гостей. Очень милая бабушка встречает вас широкой улыбкой. \nЯ с пассажирами почти не контактирую, белье горничные мне приносят. Но вот 2 дня назад приходил мальчишка официант, попросил форму почистить. Сказал на кухне мукой его осыпали. Странно потому что он пришел рано утром, там ресторан еще не работает. А еще я как-то в простыне нашла какое-то зеленое пятно.\nОна продолжает шепотом.\nМожет у нас на корабле инопланетяне, люди писают желтым." - }, - { - "code": "К-408", - "name": "Каюта 408", - "text": "Милая светлая комната. На столе — дневник с котиками, брелок-пчёлка и фото гитариста Алексея. На стене висит расписание и открытка от мамы. На кровати — плюшевый мишка и форма горничной. В углу стоит корзинка с подарками для пассажиров (конфеты, открытки). На тумбочке — кольцо из пробки.\nВчера я убирала склад и медпункт, там все как обычно было, разве что через вентиляцию я подслушала разговор с кухни, я правда не хотела. Повар ворчал на шефа, тот заставил потратить 10 ящиков бананов за день, якобы по плану должна быть рыба, а теперь чертовы бананы не дают спокойно работать, это мыло очень смешно и грустно одновременно. Су-шеф ответил что тоже был не в курсе, но Игорю Михайловичу виднее." - }, - { - "code": "К-409", - "name": "Каюта 409", - "text": "Вы стучите в грузную дверь каюты, недавно покрытую лаком. На темно коричневом фоне сияла бронзовая ручка с исцарапанной замочной скважиной, сквозь которую пробивался слабый лучик света. Дверь вам открыл худощавый парень с растрепанными волосами и как-то неловко прикрытых шапкой, окна были завешаны шторами насколько это позволяла их форма. \nТы кто?\nБеглым взглядом вы осмотрели каюту - койка и полтора квадратных метра, которые позволяли разве что дойти до кровати. Маленький откидной столик с бутылкой виски, и вешалка с одним крючком. У самой двери была лампочка и полочка с тремя ключами от номера.\nВчера я работал в баре, как и всегда. Потом пошел спать, как и всегда. Шеф живет в 402. Жалобы ему.\nИ он захлопывает дверь перед Вашим носом." - }, - { - "code": "К-410", - "name": "Каюта 410", - "text": "Каюта заперта. Из-за двери доносится сильный храп. Вы стучите в дверь приложив все усилия, на храп не прекратился. Потеряв надежду вы отворачиваясь от двери замечаете схему корабля которая отличается от той что есть у вас на этаже. Последний пункт помечен как [Б-3] - Баня." - }, - { - "code": "К-411", - "name": "Каюта 411", - "text": "Дверь каюты закрыта и на стук никто-не отзывается, видимо в это раннее утро есть важные дела не только у вас." - }, - { - "code": "К-412", - "name": "Каюта 412", - "text": "Вас встречает Нина Александровна библиотекарь корабля и руководитель игровой комнаты. Вы спрашиваете ее событиях о минувшей ночи.\n– Вчере был обычный вечер, я сидела у себя в библиотеке, вечером даже ела свой любимый банановый пирог, на этом рейсе меня им балуют каждый вечер. А, знаете, шеф вчера чуть не сломал мне дверь в библиотеку, торопился куда-то, даже не извинился. Я запомнила потому что Настюшка очень испугалась, пришлось успокаивать, Извините, мне пора бежать на рабочее место." - }, - { - "code": "Б-3", - "name": "Баня", - "text": "Разорвав запретные ленты вы заходите вы проходите в конец коридора с 3 дверьми. За одной их них вы находите баню, достаточно чистую и вполне рабочую. Похоже персонал корабля очень любит проводить тут время. Также тут лежит кусок картонной коробки на которой нарисованы бананы." - }, - { - "code": "ЗЗ", - "name": "Запретное место", - "text": "В коридоре вы видите желтую полосатую ленту, с предупреждением не входить. В конце коридора есть несколько дверей. Но идти туда вы не решаетесь." - } - ] -} +{"places":[{"code":"ЛП-1","name":"Шезлонги","text":"Десяток аккуратно расставленных шезлонгов с пастельно-голубыми полосатыми матрасами, под цвет балетных пачек. Каркасы — из потемневшего от солёного воздуха тика, с небольшими табличками, указывающими номера кают. Утром они стоят пустые, лишь на некоторых остались следы вчерашнего вечера:\nНа одном — пустой бокал с подтаявшим дном, прилипший к подстаканнику. Внутри болтается синий бумажный зонтик.\nПод третьим шезлонгом, в тени, валяется небольшая розовая заколка-краб.\nВоздух пахнет речной водой, нагретым деревом и сладковатым ароматом засохшего коктейля. Утреннее солнце высветливает пылинки, кружащиеся в воздухе. Единственный свидетель утра — горничная Люба, которая сонно протирает матрасы тряпкой, напевая что-то себе под нос и поглядывая на дверь в бар, откуда доносятся звуки уборки."},{"code":"ЛП-2","name":"Бассейн","text":"Небольшой, но живописный бассейн в форме лебедя. Вода чуть мутновата от ночной прохлады, на поверхности плавает несколько опавших лепестков от цветочных композиций с вечеринки. По краям — синие пластиковые шезлонги и плетёные столики."},{"code":"ЛП-3","name":"Прохладительные напитки","text":"Небольшая стойка-бар под тентом у бассейна. За прилавком — ряды бутылок с яркими сиропами, содовой в сифонах и медный холодильник, густо покрытый конденсатом. Утром бар не работает, но на стойке остались следы вчерашней суеты."},{"code":"ТЗ","name":"Танцевальный зал","text":"Господа артисты, а теперь растяжка, девочки помогите, к нам гости.\nВас встречает Маргарита Станиславовна. \nПочему не в форме, вчера вы отлично танцевали с нами вместе.\nВы рассказываете события которые застали вас с первыми лучами солнца. \nЯ вчера была в том баре, И девочки там были, Этот мужчина в пиджаке за баром сидел, не нравится он мне, телефоном своим тыкал бармену в лицо, мне даже жалко мальчишку стало. А потом пришел этот мясник, злой весь пыхтел. Я чего заметила то, он меня каждый вечер танцевать зовет, а вчера с барменом поговорил, и пулей вылетел из бара."},{"code":"Р-1","name":"Ресторан «Феэте \u0026 Фуа-гра»","text":"Вас встречает высокий грузный мужчина лет 40. В белой форме, он уже накричал на двоих поваров за халатность.\nСемен Викторович? Конечно знаю - VIP клиент, холить и лелеять, целовать в жопу - приказ капитана. Был вчера, не самый приятный человек. Поел был даже весел. Когда ушел не знаю. Я отходил отнести в “Пуанты” десерт. \nВы просите поговорить с официантом который приносил вчера обед в каюту 323.\nГЕНА! Хороший парень. Его ещё нет. Весь вечер он был тут, а после за разбитую тарелку, он мыл посуду вместе с посудомойкой. Часов до 3 должны были тут быть."},{"code":"Т-1","name":"Туалет","text":"Все уделали, паразиты, а мне опять отмывай. Проклятый бар.\nОсмотрев комнату уже нельзя было понять что кому-то здесь было плохо, тётя Глаша тут уже все убрала."},{"code":"Б-1","name":"Бар «Пуанты вверх!»","text":"С утра бар закрыт, приглушённое освещение и тишина делают его похожим на театральные кулисы после спектакля. Стойка липкая от пролитых напитков, на её поверхности — засохшие круги от бокалов, рассыпанная соль, мятные палочки и крошки от орешков. Под стойкой, рядом с мусорным ведром, валяется смятая пачка сигарет «Ява» и один синий пластиковый зонтик для коктейлей."},{"code":"К","name":"Костюмерная","text":"Тесное, забитое до потолка стеллажами помещение. Повсюду висят пышные пачки, трико, перья и блестящие аксессуары. Пахнет нафталином, гримом и пудрой. На большом столе у зеркала — беспорядок: коробка с нитками и иголками, пустая упаковка от таблеток «от усталости ног» и распечатанная афиша вчерашнего выступления с автографом."},{"code":"К-200","name":"Каюта 200","text":"Дверь закрыта."},{"code":"К-201","name":"Каюта 201","text":"Дверь закрыта."},{"code":"К-202","name":"Каюта 202","text":"Вам открывает дверь невысокий пожилой мужчина. Он встречает вас широкой улыбкой. Из разговора вы узнаете, что с обеда он до полуночи был на верхней палубе и играл на аккордеоне. Парни наверное спят еще, тяжелый денек был."},{"code":"К-203","name":"Каюта 203","text":"Дверь закрыта."},{"code":"К-204","name":"Каюта 204","text":"Вы стучитесь в дверь, которая с тихим скрипом открывается. Из каюты повеяло мягким цветочным ароматом. Вы проходите в комнату, никого нет. Осмотревшись, Вы замечаете пачку фотографий на столе среди которых вывстречаете и фото вчерашнего вечера.","applications":[{"name":"Фото"}]},{"code":"К-205","name":"Каюта 205","text":"Дверь закрыта."},{"code":"К-206","name":"Каюта 206","text":"На двери висит расписание занятий в танцевальном зале и сейчас Маргарита Станиславовна должна быть там."},{"code":"К-207","name":"Каюта 207","text":"Около каюты Вы встречаете молодую девушку, это же она танцевала вчера под звёздами. В каюте вы рассказываете что произошло и что ей грозит тюрьма. \nНет! Я ничего не крала! - она начинает плакать, - Я не самый хороший человек но я не нарушаю закон. Спросите руководителя, девчонок, я никогда…\nЭто дело кажется вам странным а почему-то вы верите, девушке. Хладнокровно украсть дорогой телефон, и так неудачно спрятать, что горничная находит его даже при легкой уборке.\nВчера всё утро мы репетировали, а после показывали историю про париж 19 века. После был мастер класс. Вечером как обычно с девчонками заглянули в бар, Алинке там бармен Толя нравится. Там были до половины десятого, а потом на Лебединую палубу пошли, там танцы вчера были и звезды красивые, Соня нас даже сфотографировала.\nВы с задумчивым видом получаете разрешение взять буклеты, кладете их в карман и покидаете каюту.","applications":[{"name":"Карта"}]},{"code":"К-208","name":"Каюта 208","text":"Дверь закрыта, Николай Степанович обычно в это время уже на верхней палубе играет в шахматы, поэтому вы не удивлены."},{"code":"К-209","name":"Каюта 209","text":"Убирайтесь прочь! - низкий голос из каюты."},{"code":"К-210","name":"Каюта 210","text":"Каюта закрыта, капитан на мостике."},{"code":"К-211","name":"Каюта 211","text":"Встретив старпома в коридоре, он разрешает вам исследовать его каюту, он дает вам ключи и удаляется. Идеальный порядок, пахнет свежей краской, типографской краской и металлом. Каюта похожа на кабинет штурмана. На столе — стопка уставов, навигационные приборы, распечатанный график вахт и телескоп в чехле. На стене — астрономическая карта звёздного неба, схема устройства теплохода и диплом мореходного училища. На полке — потёртый блокнот со стихами о море и лейкопластырь. Возле иллюминатора на штативе установлен телескоп, направленный на звёзды. В ящике стола, под схемами, лежит секретная шифровка о розыске контрабандистов, а на её полях карандашом написано: «Груз №7 — бананы? Проверить по накладным. Капитан не слушает...». Рядом валяется пузырёк с антигистаминными таблетками."},{"code":"Р-2","name":"Ресторан «Гранд батон»","text":"Более скромный, чем «Фуэте \u0026 Фуа-гра», но уютный ресторан на третьей палубе. Утром здесь подают завтрак: запах кофе, свежей выпечки и масла. На столиках — остатки еды, сморщенные салфетки и меню с пятном от варенья. За стойкой официанты суетятся, разнося подносы."},{"code":"И","name":"Игровая комната «Золотая рыбка»","text":"Небольшая комната с игрушками, столом для рисования и несколькими стеллажами книг за кафедрой. Похоже руководитель комнаты еще не пришел. За кафедрой вы находите засаленный учебник по мореходству и пачку читательских билетов. В центре сидит девочка и строит башню из металлического конструктора. На полу валяется плюшевая пчёлка и раскраска с кораблём. В углу стоит жестяная коробка с надписью «Юный архитектор». На ваши вопросы она не отвечает."},{"code":"Т-2","name":"Туалет","text":"Чисто, пахнет хлоркой. На полу — мокрый след от швабры. Ведро для мусора переполнено смятыми бумажками и обёртками от леденцов."},{"code":"Б-2","name":"Бар «Гранд шот»","text":"У барной стойки никого нет. На столешнице табличка с надписью:\nРаботаем с 12:00"},{"code":"А","name":"Администрация","text":"Да-да, я знаю про трагедию, а Вы тот самый детектив о котором все только и говорят? Очень приятно Валерия Сергеевна Сомова, администратор.\nНа полках много папок но все расставлены в идеальном порядке по годам и рейсам, кажется ошибок быть не может.\nВот вам список пассажиров, в этот раз не все каюты заняты, одну даже выкупили но не поплыли с нами, я там отметила. Все пассажиры у нас хорошие вежливые. А я вчера вечером уже спала, режим, да и остановка сегодня большая работы много. А теперь еще и эта кража. Больше ничем помочь не могу.","applications":[{"name":"Список пассажиров"}]},{"code":"К-300","name":"Каюта 300","text":"Проходите, садитесь.\nВ её каюте пахнет духами и воспоминаниями. На столе — программки старых балетов, фото в роли Жизели на столе.\nЭто я. Хорошие были времена. А вот в кардебалете Витя Кораблев он с нами плывет. Хороший парень был. Связался с плохой компанией. \nНа фотографии вы видите шеф-повара. Моложе худее, но это точно он!\nЕго в 90-е поймали на хранении наркотиков, они называли его “скорость”. Красивое название, вы не находите? Тогда и пропал."},{"code":"К-301","name":"Каюта 301","text":"Я думаю это инопланетяне, даже Анжела поверила. Вчера такая вспышка была, и она двигалась Дима подтвердит. Зачем им телефон я не знаю, могли же кого-нибудь украсть, А все пассажиры на месте?"},{"code":"К-302","name":"Каюта 302","text":"Кто там? Мне папа запрещает открывать незнакомым, а он ещё спит."},{"code":"К-303","name":"Каюта 303","text":"Закрыто."},{"code":"К-304","name":"Каюта 304","text":"На стук никто не отвечает, прислушавшись Вы слышите легкое сопение и бормотание.\nКакая хорошенькая девочка. … Как так напиться можно было, негодяй! … Это же совсем не ваше дело, Вам танцевать нужно, а не пирожки печь."},{"code":"К-305","name":"Каюта 305","text":"Ты видел её глаза! Теперь то она точно поверит в НЛО! Такая вспышка интересная получилась, да все теперь поверят.\nСлышится радостный разговор из каюты."},{"code":"К-306","name":"Каюта 306","text":"Здравствуйте, я вчера на Лебединой с дочкой весь вечер была. Салюты огни было красиво. Мужчину про которого вы говорите я там не видела. Знаете что странно было. Вчера шеф сильно наорал на бармена на коктейльном столике. Он принес ящик бананов, а другой забрал точно такой же. Я запомнила потому что Настюшка сильно напугалась. А в остальном вечер отличный был."},{"code":"К-307","name":"Каюта 307","text":"Здравствуйте, это вы занимаетесь этим делом? У меня есть несколько зацепок. Вчера около 22:00 часов была вспышка очень близко к кораблю, и тогда же и исчез телефон. Это инопланетяне, им нужны наши технологии, они изучают нас! Я раньше не верила, но факты!!!"},{"code":"К-308","name":"Каюта 308","text":"Эту каюту Вы уже видели. Тут живет отличный мальчуган, внук Григория Семеновича и Людмилы Аркадьевны, скорее всего где-то с ними сейчас."},{"code":"К-309","name":"Каюта 309","text":"Здрасте, свою комнату обыскивать не позволю!!! Я завуч, я на вас жаловаться буду!\nВы пытаетесь объяснить ситуацию, и что обыскивать её вы не собираетесь. Но толку было бы больше рисуй вы на воде ровные квадраты вилами.\nВорует прислуга, они уже украли мою статуэтку и очки! Я найду на них и Вас управу.\nОчень вежливо извинившись вы уходите. Очки же у нее на цепочке, о статуэтка на полочке для ключей, увы сказать ей это не получится."},{"code":"К-310","name":"Каюта 310","text":"Дверь заперта, а около ручки очень аккуратно приклеен листок с кружевной надписью: “Греем косточки, ищите на верхней палубе”."},{"code":"К-311","name":"Каюта 311","text":"По коридору быстрым шагом несется Станислав с огромной клетчатой сумкой, кажется скоро его остановка. Вы кричите ему в след, но он уже Вас не слышит."},{"code":"К-312","name":"Каюта 312","text":"Виктор Павлович с которым вы познакомились еще в очереди на посадку очень рад вас видеть.\nПроходите, дорогой друг. \nОн приглашает вас в каюту и быстро закрывает дверь. В то же мгновение улыбка на его лице исчезла.\nНас нашли. Это они, наводят суету чтобы нас поймать. Я не могу сказать за что нас ищут, это государственная тайна.\nЕго жена, Людмила Ивановна, насторожено посмотрела на дверь. \nПосле пятиминутной беседы но уже шепотом, вы покидаете каюту, с боязнью что за 3 дня путешествия вы так обмякли что не заметили шпионов прямо под носом."},{"code":"К-313","name":"Каюта 313","text":"Уютный хаос из книг. На столе — «Три мушкетёра», очки и клетка с канарейкой Кешей. На тумбочке — стопки книг с закладками. На полу стоит корзинка с пряжей и следы птичьего корма.\nЯ вчера вечером ходила по коридору, уснуть долго не могла из-за музыки сверху. И видела как мальчишка зашел в каюту Катеньки в белой рубашке был и брюках. Еще шапочка была. Я с катенькой болтаю иногда, она молодец хочет в большой пойти, на пробы едет. Ой, я же забыла ей рассказать что вор был.\nВы обещаете что всё передадите и уходите."},{"code":"К-314","name":"Каюта 314","text":"Доносится громкий женский храп! Не стоит будить такую женщину."},{"code":"К-315","name":"Каюта 315","text":"Я ничего не крал! Я просто погоду смотрел! Я не знаю вашего … ну того обокраденного.\nДверь он так и не открыл, скрывает он что-то."},{"code":"К-316","name":"Каюта 316","text":"Из двери доносится легкий запах канифоли.\nЗдравствуйте, проходите. Я про вас слышал. Вернее читал в газете. Тогда в лагере мой ребенок отдыхал. Но он ничего не знает я не рассказывал, но спасибо огромное. \nОн крепко жмет Вашу руку.\nВы видели эту молодежь верят в привидения, и ползают везде. Я их даже в запретной зоне видел. А туда же нельзя. Ух руки бы им поотрывать. Столько радиоэлементов на свои глупости тратят, и откуда деньги!"},{"code":"К-317","name":"Каюта 317","text":"Дверь закрыта. На стук никто не отвечает."},{"code":"К-318","name":"Каюта телохранителя Гриши","text":"Ты это куда, сердешный? Я тут. А там никого нет.\nПрогремел мужчина у 320 каюты."},{"code":"К-319","name":"Каюта 319","text":"Закрыто."},{"code":"К-320","name":"Каюта 320","text":"У двери вас встречает охранник. Обыскав вас он стучит в дверь каюты. Вам открывает мужчина плотного телосложения в водолазке и толстой цепи. \nЗаходите, слышал конечно, весь корабль гудит. Я даже хотел отправить Гришу отправить искать, но администратор запретила, говорит не законно это. Не то чтобы я закона боюсь, но паники нам тут не надо.\nОн как то зло улыбнулся.\nЯ вам вот что скажу мои соседи - очень подозрительные ребята, из 303 постоянно что-то бормочет себе под нос. Поехавший, зуб даю. Гриша его уже дважды сломать хотел. А больше ничего подозрительного не видел, да я и не ищу, больше не ищу.\nОн ухмыльнулся и расплылся в холодной улыбке."},{"code":"К-321","name":"Каюта 321","text":"Ключ от этой двери вам достать не получилось, но Вас уверяют что там никого нет уже давно, и пыль в щели под дверью намекает на тоже."},{"code":"К-322","name":"Каюта 322","text":"Заперта на ключ. Из-под двери тянет запахом старой ткани и пыли. Если заглянуть в замочную скважину, можно увидеть стопки постельного белья и ведро с тряпками. Видимо, используется горничными для хранения запасов."},{"code":"К-323","name":"Каюта 323","text":"Просторная VIP каюта отличается от вашей только расположением кровати, и наличием чайника с микроволновкой. \n“Всё утро я играл в шахматы с Николаем Степанычем пока не проснулся Дмитрий Федотыч и я любезно уступил ему место на верхней палубе. После читал здесь “Записки юного врача” - он указал на книгу лежащую на столе рядом с буклетами.\n“Обед я заказал в каюту официант, который приносил мне блюда был очень любопытный все про телефон спрашивал, где я его купил и сколько стоит” - Семен закурил, руки его тряслись все сильнее и уже от злости.\nУбью ворюгу! Через 2 часа остановка там я и должен позвонить сыну. Вечером отужинав с Вами и нашей милой медсестрой, я проводил последнюю до её 400-ой каюты и пошел в бар пропустить стаканчик. Я был в баре, в том что на носу, остаток вечера, и точно помню мне пришло смс, где-то в 10 часов, от жены… не будем об этом. Я и много пить не собирался вчера. В итоге даже фарфорового друга обнимал в том же баре, только никому не говорите. Больше ничего не помню, проснулся думал проспал время звонка и потянулся за телефоном, дальше вы знаете.\nТолько он завершил свой рассказ, в дверь каюты кто-то постучался. \nВойдите.\nТётя Глаша взволнованно открыла дверь. Я случайно нашла ваш телефон в 207-ой. Вы забираете телефон: \n- Никому не говорите что нашли его.\nТелефон найден дело закрыто! Слишком просто. Вы убеждаете Семёна никому ничего не говорить пока Вы не разрешите. И направляетесь в 207-ую каюту [к-207].","applications":[{"name":"Список смс"}]},{"code":"К-324","name":"Каюта 324","text":"Незаправленная кровать, выдает не самое спокойное утро, приняв холодный душ, Вы садитесь в кресло и начинаете вспоминать события вчерашнего дня. Прекрасный спектакль на первой палубе, со сцены три неотразимые молодые танцовщицы рассказывали дерзкую историю улиц ночного Парижа. Вкуснейший ужин в ресторане «Феэте \u0026 Фуа-гра» состоящий из 3 блюд прелестной компании Семёна Викторовича и Эльвиры Петровны. Волшебные танцы под звездами и целого импровизированного шоу от Екатерины (одной из участниц труппы театра). Вы были тут - прямо в центре преступления и в шаге от его предотвращения. Что ж, за дело, нужно опросить потерпевшего, он живет в каюте 323 [К-323]."},{"code":"К-325","name":"Каюта 325","text":"Тихая и неприметная([К-412]). За дверью слышен звук радио и чье-то покашливание. Постучавшись, вы слышите пожилой мужской голос, это капитан:\nУходите, я отдыхаю!\nВидимо, Вы не вовремя."},{"code":"С","name":"Склад","text":"Прохладное помещение со стеллажами до потолка. Пахнет овощами, металлом и свежестью. В углу стоят ящики с надписью «Эквадор. Бананы.». На полу — следы грязи от ботинок и белый порошок, мука похоже. На стене висит график разгрузки и список поставок."},{"code":"М","name":"Медпункт","text":"Работа с 10:00 до 20:00. В экстренных ситуациях обращаться в каюту 400."},{"code":"К-400","name":"Каюта 400","text":"Дверь закрыта. Постучавшись в дверь вы слышите:\nБегу, бегу. Что случилось? Кто-то утонул?\nПока вы рассказываете ситуацию, глаза медсестры все больше теряют к ней интерес.\nКогда кто-то будет умирать, ну или хотя-бы пораниться, зовите. А пока я спать. Скоро смена."},{"code":"К-401","name":"Каюта 401","text":"На двери табличка “не беспокоить”. Ручка двери слегка покрылась пылью."},{"code":"К-402","name":"Каюта 402","text":"Сквозь замочную скважину ничего увидеть не получается. Взяв ключи у администратора вы открываете дверь. По всей комнате разбросаны обрывки каких-то бумаг. В мусорном ведре вы находите упаковку снотворного и пачку слабительного. На столе также рекламу агентства элитной недвижимости с пометками и журнал сотовых телефонов и надпись: “3 штуки”. В тумбочке вы находите паспорт на имя Виктора Кораблева и билет в “большой театр”."},{"code":"К-403","name":"Каюта 403","text":"Книга рецептов, фото семьи и расписание смен. На стене висит график готовки и список обязанностей с кучей пометок и советов. В углу стоит чемодан, а на вешалке 3 чистых выглаженных фартука. На тумбочке — два будильника и записка:\n\t“У тебя всё получится - мама и папа.”\nВы спрашиваете про вип гостей.\nУ нас много гостей, я знаю всех, но как-то особенно к ним не отношусь. Обслуживаю всех по высшему классу. Я хочу когда-нибудь стать шефом. Начальство довольно. Правда я еще не могу спорить с капитаном или шефом, опытом они меня побеждают многократно. Но я учусь. А вечером я был здесь перечитал книгу рецептов из рыбы, он будет сегодня, вчерашний хаос хорошо что закончился. Повара были раздражены этим инцидентом."},{"code":"К-404","name":"Что это?","text":"Каюта не найдена. И ее вы не отыщите её на корабле. Когда-то давно, конструктор забыл добавить ее в план."},{"code":"К-405","name":"Каюта 405","text":"Дверь открывает молодой крючковатый парень с красными глазами. Он пускает вас в каюту. На столе — форма официанта, книга «Как стать богатым» и фото матери и журнал открытый на странице с мобильными телефонами среди которых есть и модель которая пропала у вашего соседа. На стене висит расписание рейсов и мотивирующие цитаты. Под кроватью — ящик с деньгами и пустые упаковки от лекарств. На тумбочке — записка: «Завтра разгрузка. Не опоздать.». Увидев что вы осматриваете стол он прикрывает записку:\nЭто личное, не имеете права, вчера я помогал на кухне, таскал ящики с продуктами на кухню, да шеф позавчера объявил что сегодня будет день бананов и надо принести со склада 10 ящиков.\nПопрощавшись с парнем вы выходите из каюты, после того как дверь закрылась вы слышите как бумагу начинают рвать."},{"code":"К-406","name":"Каюта 406","text":"Дверь открыта, но внутри никого. На столике записка:\nЕсли вам нужна внеплановая уборка номера запишитесь в книгу. \nНа столе также вы находите вязание, фото сына-милиционера и коробку конфет «Дюшес». На стене висит график уборки. В углу стоит тележка с чистящими средствами и запасные перчатки.\nВ книге запросов вы находите записи:\nТуалет у бара на носу, пассажиру стало плохо\nКаюта 300, сменить постельное белье\nСклад, рассыпали муку\nКаюта 412, раздавлено печенье"},{"code":"К-407","name":"Каюта 407","text":"Дверь приоткрыта. Внутри пахнет свежим бельём и мылом. На кровати — свёрнутые полотенца для гостей. Очень милая бабушка встречает вас широкой улыбкой. \nЯ с пассажирами почти не контактирую, белье горничные мне приносят. Но вот 2 дня назад приходил мальчишка официант, попросил форму почистить. Сказал на кухне мукой его осыпали. Странно потому что он пришел рано утром, там ресторан еще не работает. А еще я как-то в простыне нашла какое-то зеленое пятно.\nОна продолжает шепотом.\nМожет у нас на корабле инопланетяне, люди писают желтым."},{"code":"К-408","name":"Каюта 408","text":"Милая светлая комната. На столе — дневник с котиками, брелок-пчёлка и фото гитариста Алексея. На стене висит расписание и открытка от мамы. На кровати — плюшевый мишка и форма горничной. В углу стоит корзинка с подарками для пассажиров (конфеты, открытки). На тумбочке — кольцо из пробки.\nВчера я убирала склад и медпункт, там все как обычно было, разве что через вентиляцию я подслушала разговор с кухни, я правда не хотела. Повар ворчал на шефа, тот заставил потратить 10 ящиков бананов за день, якобы по плану должна быть рыба, а теперь чертовы бананы не дают спокойно работать, это мыло очень смешно и грустно одновременно. Су-шеф ответил что тоже был не в курсе, но Игорю Михайловичу виднее."},{"code":"К-409","name":"Каюта 409","text":"Вы стучите в грузную дверь каюты, недавно покрытую лаком. На темно коричневом фоне сияла бронзовая ручка с исцарапанной замочной скважиной, сквозь которую пробивался слабый лучик света. Дверь вам открыл худощавый парень с растрепанными волосами и как-то неловко прикрытых шапкой, окна были завешаны шторами насколько это позволяла их форма. \nТы кто?\nБеглым взглядом вы осмотрели каюту - койка и полтора квадратных метра, которые позволяли разве что дойти до кровати. Маленький откидной столик с бутылкой виски, и вешалка с одним крючком. У самой двери была лампочка и полочка с тремя ключами от номера.\nВчера я работал в баре, как и всегда. Потом пошел спать, как и всегда. Шеф живет в 402. Жалобы ему.\nИ он захлопывает дверь перед Вашим носом."},{"code":"К-410","name":"Каюта 410","text":"Каюта заперта. Из-за двери доносится сильный храп. Вы стучите в дверь приложив все усилия, на храп не прекратился. Потеряв надежду вы отворачиваясь от двери замечаете схему корабля которая отличается от той что есть у вас на этаже. Последний пункт помечен как [Б-3] - Баня."},{"code":"К-411","name":"Каюта 411","text":"Дверь каюты закрыта и на стук никто-не отзывается, видимо в это раннее утро есть важные дела не только у вас."},{"code":"К-412","name":"Каюта 412","text":"Вас встречает Нина Александровна библиотекарь корабля и руководитель игровой комнаты. Вы спрашиваете ее событиях о минувшей ночи.\n– Вчере был обычный вечер, я сидела у себя в библиотеке, вечером даже ела свой любимый банановый пирог, на этом рейсе меня им балуют каждый вечер. А, знаете, шеф вчера чуть не сломал мне дверь в библиотеку, торопился куда-то, даже не извинился. Я запомнила потому что Настюшка очень испугалась, пришлось успокаивать, Извините, мне пора бежать на рабочее место."},{"code":"Б-3","name":"Баня","text":"Разорвав запретные ленты вы заходите вы проходите в конец коридора с 3 дверьми. За одной их них вы находите баню, достаточно чистую и вполне рабочую. Похоже персонал корабля очень любит проводить тут время. Также тут лежит кусок картонной коробки на которой нарисованы бананы."},{"code":"ЗЗ","name":"Запретное место","text":"В коридоре вы видите желтую полосатую ленту, с предупреждением не входить. В конце коридора есть несколько дверей. Но идти туда вы не решаетесь."}]} \ No newline at end of file diff --git a/go.mod b/go.mod index 44e6cf3..c3ca084 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,23 @@ module evening_detective -go 1.23 +go 1.23.0 -toolchain go1.23.10 +toolchain go1.24.5 require ( - github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 - google.golang.org/grpc v1.64.0 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 + google.golang.org/grpc v1.75.0 ) require ( + github.com/ghodss/yaml v1.0.0 // indirect + github.com/golang/glog v1.2.5 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/phpdave11/gofpdi v1.0.14-0.20211212211723-1f10f9844311 // indirect github.com/pkg/errors v0.8.1 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + gopkg.in/yaml.v2 v2.2.3 // indirect ) require ( @@ -27,10 +33,12 @@ require ( github.com/mattn/go-sqlite3 v1.14.28 github.com/signintech/gopdf v0.32.0 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - golang.org/x/net v0.23.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.15.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 - google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 // indirect - google.golang.org/protobuf v1.34.1 + golang.org/x/net v0.41.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.28.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect + google.golang.org/protobuf v1.36.7 // indirect ) + +tool github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway diff --git a/internal/app/server.go b/internal/app/server.go index c01d7d4..2e7cf28 100644 --- a/internal/app/server.go +++ b/internal/app/server.go @@ -63,3 +63,7 @@ func (s *Server) GiveApplications(ctx context.Context, req *proto.GiveApplicatio func (s *Server) DownloadTeamsQrCodesFile(ctx context.Context, req *proto.DownloadTeamsQrCodesFileReq) (*proto.DownloadTeamsQrCodesFileRsp, error) { return s.services.DownloadTeamsQrCodesFile(ctx, req) } + +func (s *Server) GetGraph(ctx context.Context, req *proto.GetGraphReq) (*proto.GetGraphRsp, error) { + return s.services.GetGraph(ctx, req) +} diff --git a/internal/services/services.go b/internal/services/services.go index 1c18346..17533cd 100644 --- a/internal/services/services.go +++ b/internal/services/services.go @@ -200,6 +200,29 @@ func (s *Services) DownloadTeamsQrCodesFile(ctx context.Context, req *proto.Down return &proto.DownloadTeamsQrCodesFileRsp{Result: b}, nil } +func (s *Services) GetGraph(ctx context.Context, req *proto.GetGraphReq) (*proto.GetGraphRsp, error) { + graph := s.storyService.GetGraph(ctx) + nodes := make([]*proto.GetGraphRsp_Node, 0, len(graph.Nodes)) + for _, node := range graph.Nodes { + nodes = append(nodes, &proto.GetGraphRsp_Node{ + Id: node.ID, + Label: node.Label, + }) + } + edges := make([]*proto.GetGraphRsp_Edge, 0, len(graph.Edges)) + for _, edge := range graph.Edges { + edges = append(edges, &proto.GetGraphRsp_Edge{ + From: edge.From, + To: edge.To, + Arrows: "to", + }) + } + return &proto.GetGraphRsp{ + Nodes: nodes, + Edges: edges, + }, nil +} + func (s *Services) getTeam(ctx context.Context) (*models.Team, error) { md, ok := metadata.FromIncomingContext(ctx) if !ok { diff --git a/internal/services/story_service/service.go b/internal/services/story_service/service.go index c516793..8eba9c3 100644 --- a/internal/services/story_service/service.go +++ b/internal/services/story_service/service.go @@ -1,10 +1,12 @@ package story_service import ( + "context" "encoding/json" "fmt" "log" "os" + "regexp" "strings" ) @@ -37,6 +39,21 @@ type Place struct { Applications []*Application `json:"applications"` } +type Graph struct { + Nodes []*Node + Edges []*Edge +} + +type Node struct { + ID int32 + Label string +} + +type Edge struct { + From int32 + To int32 +} + type Application struct { Name string `json:"name"` } @@ -69,6 +86,8 @@ func (s *StoryService) GetPlace(code string) *Place { code = clearCode(code) for _, place := range s.story.Places { if clearCode(place.Code) == code { + re := regexp.MustCompile(`\(\[[a-zA-Zа-яА-Я\d-]+\]\)`) + place.Text = re.ReplaceAllString(place.Text, "") return place } } @@ -79,6 +98,41 @@ func (s *StoryService) GetPlace(code string) *Place { } } +func (s *StoryService) GetGraph(ctx context.Context) *Graph { + m := make(map[string]int32, len(s.story.Places)) + nodes := make([]*Node, 0, len(s.story.Places)) + for i, place := range s.story.Places { + m[clearCode(place.Code)] = int32(i) + nodes = append(nodes, &Node{ID: int32(i), Label: place.Code}) + } + + edges := make([]*Edge, 0, len(s.story.Places)*3) + for _, place := range s.story.Places { + re := regexp.MustCompile(`\(\[[a-zA-Zа-яА-Я\d-]+\]\)`) + matches := re.FindAllString(place.Text, -1) + + for _, match := range matches { + edges = append(edges, &Edge{ + From: m[clearCode(place.Code)], + To: m[clearMatch(match)], + }) + } + } + + return &Graph{ + Nodes: nodes, + Edges: edges, + } +} + +func clearMatch(s string) string { + s = strings.TrimPrefix(s, "(") + s = strings.TrimPrefix(s, "[") + s = strings.TrimSuffix(s, ")") + s = strings.TrimSuffix(s, "]") + return clearCode(s) +} + func clearCode(code string) string { code = strings.ToLower(code) code = strings.TrimSpace(code) diff --git a/proto/main.pb.go b/proto/main.pb.go index ed1fe68..ecb35d1 100644 --- a/proto/main.pb.go +++ b/proto/main.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.1 -// protoc v5.26.1 +// protoc-gen-go v1.36.9 +// protoc v6.32.1 // source: main.proto package proto @@ -12,6 +12,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,18 +23,16 @@ const ( ) type PingReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PingReq) Reset() { *x = PingReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PingReq) String() string { @@ -44,7 +43,7 @@ func (*PingReq) ProtoMessage() {} func (x *PingReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -60,18 +59,16 @@ func (*PingReq) Descriptor() ([]byte, []int) { } type PingRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PingRsp) Reset() { *x = PingRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PingRsp) String() string { @@ -82,7 +79,7 @@ func (*PingRsp) ProtoMessage() {} func (x *PingRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -98,20 +95,17 @@ func (*PingRsp) Descriptor() ([]byte, []int) { } type AddTeamsReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Teams []*Team `protobuf:"bytes,1,rep,name=teams,proto3" json:"teams,omitempty"` unknownFields protoimpl.UnknownFields - - Teams []*Team `protobuf:"bytes,1,rep,name=teams,proto3" json:"teams,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddTeamsReq) Reset() { *x = AddTeamsReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddTeamsReq) String() string { @@ -122,7 +116,7 @@ func (*AddTeamsReq) ProtoMessage() {} func (x *AddTeamsReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -145,20 +139,17 @@ func (x *AddTeamsReq) GetTeams() []*Team { } type Team struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Team) Reset() { *x = Team{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Team) String() string { @@ -169,7 +160,7 @@ func (*Team) ProtoMessage() {} func (x *Team) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -192,20 +183,17 @@ func (x *Team) GetName() string { } type AddTeamsRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Teams []*TeamFull `protobuf:"bytes,1,rep,name=teams,proto3" json:"teams,omitempty"` unknownFields protoimpl.UnknownFields - - Teams []*TeamFull `protobuf:"bytes,1,rep,name=teams,proto3" json:"teams,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddTeamsRsp) Reset() { *x = AddTeamsRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddTeamsRsp) String() string { @@ -216,7 +204,7 @@ func (*AddTeamsRsp) ProtoMessage() {} func (x *AddTeamsRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -239,22 +227,19 @@ func (x *AddTeamsRsp) GetTeams() []*TeamFull { } type TeamFull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` unknownFields protoimpl.UnknownFields - - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TeamFull) Reset() { *x = TeamFull{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TeamFull) String() string { @@ -265,7 +250,7 @@ func (*TeamFull) ProtoMessage() {} func (x *TeamFull) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -302,18 +287,16 @@ func (x *TeamFull) GetPassword() string { } type GetTeamsReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetTeamsReq) Reset() { *x = GetTeamsReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTeamsReq) String() string { @@ -324,7 +307,7 @@ func (*GetTeamsReq) ProtoMessage() {} func (x *GetTeamsReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -340,20 +323,17 @@ func (*GetTeamsReq) Descriptor() ([]byte, []int) { } type GetTeamsRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Teams []*TeamAdvanced `protobuf:"bytes,1,rep,name=teams,proto3" json:"teams,omitempty"` unknownFields protoimpl.UnknownFields - - Teams []*TeamAdvanced `protobuf:"bytes,1,rep,name=teams,proto3" json:"teams,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTeamsRsp) Reset() { *x = GetTeamsRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTeamsRsp) String() string { @@ -364,7 +344,7 @@ func (*GetTeamsRsp) ProtoMessage() {} func (x *GetTeamsRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -387,18 +367,16 @@ func (x *GetTeamsRsp) GetTeams() []*TeamAdvanced { } type GetTeamsCSVReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetTeamsCSVReq) Reset() { *x = GetTeamsCSVReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTeamsCSVReq) String() string { @@ -409,7 +387,7 @@ func (*GetTeamsCSVReq) ProtoMessage() {} func (x *GetTeamsCSVReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -425,20 +403,17 @@ func (*GetTeamsCSVReq) Descriptor() ([]byte, []int) { } type GetTeamsCSVRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` unknownFields protoimpl.UnknownFields - - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTeamsCSVRsp) Reset() { *x = GetTeamsCSVRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTeamsCSVRsp) String() string { @@ -449,7 +424,7 @@ func (*GetTeamsCSVRsp) ProtoMessage() {} func (x *GetTeamsCSVRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -472,25 +447,22 @@ func (x *GetTeamsCSVRsp) GetData() string { } type TeamAdvanced struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` + SpendTime int64 `protobuf:"varint,5,opt,name=spendTime,proto3" json:"spendTime,omitempty"` + Applications []*Application `protobuf:"bytes,6,rep,name=applications,proto3" json:"applications,omitempty"` unknownFields protoimpl.UnknownFields - - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` - Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` - SpendTime int64 `protobuf:"varint,5,opt,name=spendTime,proto3" json:"spendTime,omitempty"` - Applications []*Application `protobuf:"bytes,6,rep,name=applications,proto3" json:"applications,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TeamAdvanced) Reset() { *x = TeamAdvanced{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TeamAdvanced) String() string { @@ -501,7 +473,7 @@ func (*TeamAdvanced) ProtoMessage() {} func (x *TeamAdvanced) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -559,22 +531,19 @@ func (x *TeamAdvanced) GetApplications() []*Application { } type Application struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` unknownFields protoimpl.UnknownFields - - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Application) Reset() { *x = Application{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Application) String() string { @@ -585,7 +554,7 @@ func (*Application) ProtoMessage() {} func (x *Application) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -622,18 +591,16 @@ func (x *Application) GetState() string { } type GetTeamReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetTeamReq) Reset() { *x = GetTeamReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTeamReq) String() string { @@ -644,7 +611,7 @@ func (*GetTeamReq) ProtoMessage() {} func (x *GetTeamReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -660,21 +627,18 @@ func (*GetTeamReq) Descriptor() ([]byte, []int) { } type GetTeamRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Actions []*Action `protobuf:"bytes,2,rep,name=actions,proto3" json:"actions,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Actions []*Action `protobuf:"bytes,2,rep,name=actions,proto3" json:"actions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTeamRsp) Reset() { *x = GetTeamRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTeamRsp) String() string { @@ -685,7 +649,7 @@ func (*GetTeamRsp) ProtoMessage() {} func (x *GetTeamRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -715,20 +679,17 @@ func (x *GetTeamRsp) GetActions() []*Action { } type AddActionReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Place string `protobuf:"bytes,1,opt,name=place,proto3" json:"place,omitempty"` unknownFields protoimpl.UnknownFields - - Place string `protobuf:"bytes,1,opt,name=place,proto3" json:"place,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddActionReq) Reset() { *x = AddActionReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddActionReq) String() string { @@ -739,7 +700,7 @@ func (*AddActionReq) ProtoMessage() {} func (x *AddActionReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -762,18 +723,16 @@ func (x *AddActionReq) GetPlace() string { } type AddActionRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddActionRsp) Reset() { *x = AddActionRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddActionRsp) String() string { @@ -784,7 +743,7 @@ func (*AddActionRsp) ProtoMessage() {} func (x *AddActionRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -800,24 +759,21 @@ func (*AddActionRsp) Descriptor() ([]byte, []int) { } type Action struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Place string `protobuf:"bytes,2,opt,name=place,proto3" json:"place,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"` + Applications []*Application `protobuf:"bytes,5,rep,name=applications,proto3" json:"applications,omitempty"` unknownFields protoimpl.UnknownFields - - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Place string `protobuf:"bytes,2,opt,name=place,proto3" json:"place,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"` - Applications []*Application `protobuf:"bytes,5,rep,name=applications,proto3" json:"applications,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Action) Reset() { *x = Action{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Action) String() string { @@ -828,7 +784,7 @@ func (*Action) ProtoMessage() {} func (x *Action) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -879,18 +835,16 @@ func (x *Action) GetApplications() []*Application { } type GetGameReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetGameReq) Reset() { *x = GetGameReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetGameReq) String() string { @@ -901,7 +855,7 @@ func (*GetGameReq) ProtoMessage() {} func (x *GetGameReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -917,22 +871,19 @@ func (*GetGameReq) Descriptor() ([]byte, []int) { } type GetGameRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + State string `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` + StartAt string `protobuf:"bytes,2,opt,name=startAt,proto3" json:"startAt,omitempty"` + EndAt string `protobuf:"bytes,3,opt,name=endAt,proto3" json:"endAt,omitempty"` unknownFields protoimpl.UnknownFields - - State string `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` - StartAt string `protobuf:"bytes,2,opt,name=startAt,proto3" json:"startAt,omitempty"` - EndAt string `protobuf:"bytes,3,opt,name=endAt,proto3" json:"endAt,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetGameRsp) Reset() { *x = GetGameRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetGameRsp) String() string { @@ -943,7 +894,7 @@ func (*GetGameRsp) ProtoMessage() {} func (x *GetGameRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -980,18 +931,16 @@ func (x *GetGameRsp) GetEndAt() string { } type GameStartReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GameStartReq) Reset() { *x = GameStartReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GameStartReq) String() string { @@ -1002,7 +951,7 @@ func (*GameStartReq) ProtoMessage() {} func (x *GameStartReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1018,18 +967,16 @@ func (*GameStartReq) Descriptor() ([]byte, []int) { } type GameStartRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GameStartRsp) Reset() { *x = GameStartRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GameStartRsp) String() string { @@ -1040,7 +987,7 @@ func (*GameStartRsp) ProtoMessage() {} func (x *GameStartRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1056,20 +1003,17 @@ func (*GameStartRsp) Descriptor() ([]byte, []int) { } type GameStopReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TimeSeconds int64 `protobuf:"varint,1,opt,name=timeSeconds,proto3" json:"timeSeconds,omitempty"` unknownFields protoimpl.UnknownFields - - TimeSeconds int64 `protobuf:"varint,1,opt,name=timeSeconds,proto3" json:"timeSeconds,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GameStopReq) Reset() { *x = GameStopReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GameStopReq) String() string { @@ -1080,7 +1024,7 @@ func (*GameStopReq) ProtoMessage() {} func (x *GameStopReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1103,18 +1047,16 @@ func (x *GameStopReq) GetTimeSeconds() int64 { } type GameStopRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GameStopRsp) Reset() { *x = GameStopRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GameStopRsp) String() string { @@ -1125,7 +1067,7 @@ func (*GameStopRsp) ProtoMessage() {} func (x *GameStopRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1141,21 +1083,18 @@ func (*GameStopRsp) Descriptor() ([]byte, []int) { } type GiveApplicationsReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TeamId int64 `protobuf:"varint,1,opt,name=teamId,proto3" json:"teamId,omitempty"` + Applications []*Application `protobuf:"bytes,2,rep,name=applications,proto3" json:"applications,omitempty"` unknownFields protoimpl.UnknownFields - - TeamId int64 `protobuf:"varint,1,opt,name=teamId,proto3" json:"teamId,omitempty"` - Applications []*Application `protobuf:"bytes,2,rep,name=applications,proto3" json:"applications,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GiveApplicationsReq) Reset() { *x = GiveApplicationsReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GiveApplicationsReq) String() string { @@ -1166,7 +1105,7 @@ func (*GiveApplicationsReq) ProtoMessage() {} func (x *GiveApplicationsReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1196,18 +1135,16 @@ func (x *GiveApplicationsReq) GetApplications() []*Application { } type GiveApplicationsRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GiveApplicationsRsp) Reset() { *x = GiveApplicationsRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GiveApplicationsRsp) String() string { @@ -1218,7 +1155,7 @@ func (*GiveApplicationsRsp) ProtoMessage() {} func (x *GiveApplicationsRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1234,18 +1171,16 @@ func (*GiveApplicationsRsp) Descriptor() ([]byte, []int) { } type DownloadTeamsQrCodesFileReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DownloadTeamsQrCodesFileReq) Reset() { *x = DownloadTeamsQrCodesFileReq{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DownloadTeamsQrCodesFileReq) String() string { @@ -1256,7 +1191,7 @@ func (*DownloadTeamsQrCodesFileReq) ProtoMessage() {} func (x *DownloadTeamsQrCodesFileReq) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1272,20 +1207,17 @@ func (*DownloadTeamsQrCodesFileReq) Descriptor() ([]byte, []int) { } type DownloadTeamsQrCodesFileRsp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result []byte `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields - - Result []byte `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DownloadTeamsQrCodesFileRsp) Reset() { *x = DownloadTeamsQrCodesFileRsp{} - if protoimpl.UnsafeEnabled { - mi := &file_main_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_main_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DownloadTeamsQrCodesFileRsp) String() string { @@ -1296,7 +1228,7 @@ func (*DownloadTeamsQrCodesFileRsp) ProtoMessage() {} func (x *DownloadTeamsQrCodesFileRsp) ProtoReflect() protoreflect.Message { mi := &file_main_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1318,201 +1250,317 @@ func (x *DownloadTeamsQrCodesFileRsp) GetResult() []byte { return nil } +type GetGraphReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetGraphReq) Reset() { + *x = GetGraphReq{} + mi := &file_main_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGraphReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGraphReq) ProtoMessage() {} + +func (x *GetGraphReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGraphReq.ProtoReflect.Descriptor instead. +func (*GetGraphReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{27} +} + +type GetGraphRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Nodes []*GetGraphRsp_Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + Edges []*GetGraphRsp_Edge `protobuf:"bytes,2,rep,name=edges,proto3" json:"edges,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetGraphRsp) Reset() { + *x = GetGraphRsp{} + mi := &file_main_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGraphRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGraphRsp) ProtoMessage() {} + +func (x *GetGraphRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGraphRsp.ProtoReflect.Descriptor instead. +func (*GetGraphRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{28} +} + +func (x *GetGraphRsp) GetNodes() []*GetGraphRsp_Node { + if x != nil { + return x.Nodes + } + return nil +} + +func (x *GetGraphRsp) GetEdges() []*GetGraphRsp_Edge { + if x != nil { + return x.Edges + } + return nil +} + +type GetGraphRsp_Node struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetGraphRsp_Node) Reset() { + *x = GetGraphRsp_Node{} + mi := &file_main_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGraphRsp_Node) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGraphRsp_Node) ProtoMessage() {} + +func (x *GetGraphRsp_Node) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGraphRsp_Node.ProtoReflect.Descriptor instead. +func (*GetGraphRsp_Node) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{28, 0} +} + +func (x *GetGraphRsp_Node) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *GetGraphRsp_Node) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +type GetGraphRsp_Edge struct { + state protoimpl.MessageState `protogen:"open.v1"` + From int32 `protobuf:"varint,1,opt,name=from,proto3" json:"from,omitempty"` + To int32 `protobuf:"varint,2,opt,name=to,proto3" json:"to,omitempty"` + Arrows string `protobuf:"bytes,3,opt,name=arrows,proto3" json:"arrows,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetGraphRsp_Edge) Reset() { + *x = GetGraphRsp_Edge{} + mi := &file_main_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGraphRsp_Edge) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGraphRsp_Edge) ProtoMessage() {} + +func (x *GetGraphRsp_Edge) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGraphRsp_Edge.ProtoReflect.Descriptor instead. +func (*GetGraphRsp_Edge) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{28, 1} +} + +func (x *GetGraphRsp_Edge) GetFrom() int32 { + if x != nil { + return x.From + } + return 0 +} + +func (x *GetGraphRsp_Edge) GetTo() int32 { + if x != nil { + return x.To + } + return 0 +} + +func (x *GetGraphRsp_Edge) GetArrows() string { + if x != nil { + return x.Arrows + } + return "" +} + var File_main_proto protoreflect.FileDescriptor -var file_main_proto_rawDesc = []byte{ - 0x0a, 0x0a, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x72, - 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x09, 0x0a, 0x07, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x22, 0x09, - 0x0a, 0x07, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x73, 0x70, 0x22, 0x42, 0x0a, 0x0b, 0x41, 0x64, 0x64, - 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x05, 0x74, 0x65, 0x61, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, - 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x05, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x22, 0x1a, 0x0a, - 0x04, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x46, 0x0a, 0x0b, 0x41, 0x64, 0x64, - 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x65, 0x61, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, - 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x52, 0x05, 0x74, 0x65, 0x61, 0x6d, - 0x73, 0x22, 0x4a, 0x0a, 0x08, 0x54, 0x65, 0x61, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x0d, 0x0a, - 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x22, 0x4a, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x12, 0x3b, 0x0a, 0x05, 0x74, - 0x65, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x72, 0x61, - 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x64, 0x52, 0x05, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x61, 0x6d, 0x73, 0x43, 0x53, 0x56, 0x52, 0x65, 0x71, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x43, 0x53, 0x56, 0x52, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0xc8, 0x01, 0x0a, 0x0c, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, - 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x47, 0x0a, 0x0b, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x71, 0x22, 0x5b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x73, 0x70, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x24, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, - 0x14, 0x0a, 0x05, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x73, 0x70, 0x22, 0xa0, 0x01, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x48, - 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x0c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x47, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x22, 0x52, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x64, 0x41, 0x74, 0x22, 0x0e, 0x0a, 0x0c, 0x47, 0x61, - 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x22, 0x0e, 0x0a, 0x0c, 0x47, 0x61, - 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x73, 0x70, 0x22, 0x2f, 0x0a, 0x0b, 0x47, 0x61, - 0x6d, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x69, 0x6d, - 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x74, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x0d, 0x0a, 0x0b, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x73, 0x70, 0x22, 0x77, 0x0a, 0x13, 0x47, 0x69, - 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x0c, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x69, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x73, 0x70, 0x22, 0x1d, 0x0a, 0x1b, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x51, 0x72, 0x43, 0x6f, 0x64, - 0x65, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x22, 0x35, 0x0a, 0x1b, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x51, 0x72, 0x43, 0x6f, 0x64, 0x65, - 0x73, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x32, 0x85, 0x0a, 0x0a, 0x10, 0x45, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x59, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x20, 0x2e, - 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, - 0x20, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x73, - 0x70, 0x22, 0x0d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x07, 0x12, 0x05, 0x2f, 0x70, 0x69, 0x6e, 0x67, - 0x12, 0x69, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x24, 0x2e, 0x63, - 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x41, 0x64, 0x64, - 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, - 0x3a, 0x01, 0x2a, 0x22, 0x06, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x66, 0x0a, 0x08, 0x47, - 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, - 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, - 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, - 0x52, 0x73, 0x70, 0x22, 0x0e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, 0x12, 0x06, 0x2f, 0x74, 0x65, - 0x61, 0x6d, 0x73, 0x12, 0x6d, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x43, - 0x53, 0x56, 0x12, 0x27, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x65, 0x61, 0x6d, 0x73, 0x43, 0x53, 0x56, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x63, 0x72, - 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x43, 0x53, - 0x56, 0x52, 0x73, 0x70, 0x22, 0x0c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x06, 0x12, 0x04, 0x2f, 0x63, - 0x73, 0x76, 0x12, 0x62, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x23, 0x2e, - 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x65, 0x61, 0x6d, 0x52, 0x73, 0x70, 0x22, 0x0d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x07, 0x12, - 0x05, 0x2f, 0x74, 0x65, 0x61, 0x6d, 0x12, 0x73, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x41, 0x64, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x63, 0x72, 0x61, - 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x73, - 0x70, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x74, - 0x65, 0x61, 0x6d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x07, 0x47, - 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x63, 0x72, - 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x73, 0x70, - 0x22, 0x0d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x07, 0x12, 0x05, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x12, - 0x71, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x25, 0x2e, 0x63, - 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x61, - 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x73, 0x70, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x6d, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x24, - 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x73, 0x70, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x6f, - 0x70, 0x12, 0x97, 0x01, 0x0a, 0x10, 0x47, 0x69, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x2e, 0x47, 0x69, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, - 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x47, - 0x69, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x73, 0x70, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, - 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x18, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x51, 0x72, 0x43, - 0x6f, 0x64, 0x65, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x34, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, - 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x65, 0x61, 0x6d, 0x73, - 0x51, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x34, - 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x51, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x73, 0x70, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x74, - 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x64, 0x66, 0x42, 0x0b, 0x5a, 0x09, 0x70, 0x6b, 0x67, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_main_proto_rawDesc = "" + + "\n" + + "\n" + + "main.proto\x12\x17crabs.evening_detective\x1a\x1cgoogle/api/annotations.proto\"\t\n" + + "\aPingReq\"\t\n" + + "\aPingRsp\"B\n" + + "\vAddTeamsReq\x123\n" + + "\x05teams\x18\x01 \x03(\v2\x1d.crabs.evening_detective.TeamR\x05teams\"\x1a\n" + + "\x04Team\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"F\n" + + "\vAddTeamsRsp\x127\n" + + "\x05teams\x18\x01 \x03(\v2!.crabs.evening_detective.TeamFullR\x05teams\"J\n" + + "\bTeamFull\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n" + + "\bpassword\x18\x03 \x01(\tR\bpassword\"\r\n" + + "\vGetTeamsReq\"J\n" + + "\vGetTeamsRsp\x12;\n" + + "\x05teams\x18\x01 \x03(\v2%.crabs.evening_detective.TeamAdvancedR\x05teams\"\x10\n" + + "\x0eGetTeamsCSVReq\"$\n" + + "\x0eGetTeamsCSVRsp\x12\x12\n" + + "\x04data\x18\x01 \x01(\tR\x04data\"\xc8\x01\n" + + "\fTeamAdvanced\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n" + + "\bpassword\x18\x03 \x01(\tR\bpassword\x12\x10\n" + + "\x03url\x18\x04 \x01(\tR\x03url\x12\x1c\n" + + "\tspendTime\x18\x05 \x01(\x03R\tspendTime\x12H\n" + + "\fapplications\x18\x06 \x03(\v2$.crabs.evening_detective.ApplicationR\fapplications\"G\n" + + "\vApplication\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x14\n" + + "\x05state\x18\x03 \x01(\tR\x05state\"\f\n" + + "\n" + + "GetTeamReq\"[\n" + + "\n" + + "GetTeamRsp\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x129\n" + + "\aactions\x18\x02 \x03(\v2\x1f.crabs.evening_detective.ActionR\aactions\"$\n" + + "\fAddActionReq\x12\x14\n" + + "\x05place\x18\x01 \x01(\tR\x05place\"\x0e\n" + + "\fAddActionRsp\"\xa0\x01\n" + + "\x06Action\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x14\n" + + "\x05place\x18\x02 \x01(\tR\x05place\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x12\n" + + "\x04text\x18\x04 \x01(\tR\x04text\x12H\n" + + "\fapplications\x18\x05 \x03(\v2$.crabs.evening_detective.ApplicationR\fapplications\"\f\n" + + "\n" + + "GetGameReq\"R\n" + + "\n" + + "GetGameRsp\x12\x14\n" + + "\x05state\x18\x01 \x01(\tR\x05state\x12\x18\n" + + "\astartAt\x18\x02 \x01(\tR\astartAt\x12\x14\n" + + "\x05endAt\x18\x03 \x01(\tR\x05endAt\"\x0e\n" + + "\fGameStartReq\"\x0e\n" + + "\fGameStartRsp\"/\n" + + "\vGameStopReq\x12 \n" + + "\vtimeSeconds\x18\x01 \x01(\x03R\vtimeSeconds\"\r\n" + + "\vGameStopRsp\"w\n" + + "\x13GiveApplicationsReq\x12\x16\n" + + "\x06teamId\x18\x01 \x01(\x03R\x06teamId\x12H\n" + + "\fapplications\x18\x02 \x03(\v2$.crabs.evening_detective.ApplicationR\fapplications\"\x15\n" + + "\x13GiveApplicationsRsp\"\x1d\n" + + "\x1bDownloadTeamsQrCodesFileReq\"5\n" + + "\x1bDownloadTeamsQrCodesFileRsp\x12\x16\n" + + "\x06result\x18\x01 \x01(\fR\x06result\"\r\n" + + "\vGetGraphReq\"\x81\x02\n" + + "\vGetGraphRsp\x12?\n" + + "\x05nodes\x18\x01 \x03(\v2).crabs.evening_detective.GetGraphRsp.NodeR\x05nodes\x12?\n" + + "\x05edges\x18\x02 \x03(\v2).crabs.evening_detective.GetGraphRsp.EdgeR\x05edges\x1a,\n" + + "\x04Node\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x05R\x02id\x12\x14\n" + + "\x05label\x18\x02 \x01(\tR\x05label\x1aB\n" + + "\x04Edge\x12\x12\n" + + "\x04from\x18\x01 \x01(\x05R\x04from\x12\x0e\n" + + "\x02to\x18\x02 \x01(\x05R\x02to\x12\x16\n" + + "\x06arrows\x18\x03 \x01(\tR\x06arrows2\xed\n" + + "\n" + + "\x10EveningDetective\x12Y\n" + + "\x04Ping\x12 .crabs.evening_detective.PingReq\x1a .crabs.evening_detective.PingRsp\"\r\x82\xd3\xe4\x93\x02\a\x12\x05/ping\x12i\n" + + "\bAddTeams\x12$.crabs.evening_detective.AddTeamsReq\x1a$.crabs.evening_detective.AddTeamsRsp\"\x11\x82\xd3\xe4\x93\x02\v:\x01*\"\x06/teams\x12f\n" + + "\bGetTeams\x12$.crabs.evening_detective.GetTeamsReq\x1a$.crabs.evening_detective.GetTeamsRsp\"\x0e\x82\xd3\xe4\x93\x02\b\x12\x06/teams\x12m\n" + + "\vGetTeamsCSV\x12'.crabs.evening_detective.GetTeamsCSVReq\x1a'.crabs.evening_detective.GetTeamsCSVRsp\"\f\x82\xd3\xe4\x93\x02\x06\x12\x04/csv\x12b\n" + + "\aGetTeam\x12#.crabs.evening_detective.GetTeamReq\x1a#.crabs.evening_detective.GetTeamRsp\"\r\x82\xd3\xe4\x93\x02\a\x12\x05/team\x12s\n" + + "\tAddAction\x12%.crabs.evening_detective.AddActionReq\x1a%.crabs.evening_detective.AddActionRsp\"\x18\x82\xd3\xe4\x93\x02\x12:\x01*\"\r/team/actions\x12b\n" + + "\aGetGame\x12#.crabs.evening_detective.GetGameReq\x1a#.crabs.evening_detective.GetGameRsp\"\r\x82\xd3\xe4\x93\x02\a\x12\x05/game\x12q\n" + + "\tGameStart\x12%.crabs.evening_detective.GameStartReq\x1a%.crabs.evening_detective.GameStartRsp\"\x16\x82\xd3\xe4\x93\x02\x10:\x01*\"\v/game/start\x12m\n" + + "\bGameStop\x12$.crabs.evening_detective.GameStopReq\x1a$.crabs.evening_detective.GameStopRsp\"\x15\x82\xd3\xe4\x93\x02\x0f:\x01*\"\n" + + "/game/stop\x12\x97\x01\n" + + "\x10GiveApplications\x12,.crabs.evening_detective.GiveApplicationsReq\x1a,.crabs.evening_detective.GiveApplicationsRsp\"'\x82\xd3\xe4\x93\x02!:\x01*\"\x1c/teams/{teamId}/applications\x12\x9a\x01\n" + + "\x18DownloadTeamsQrCodesFile\x124.crabs.evening_detective.DownloadTeamsQrCodesFileReq\x1a4.crabs.evening_detective.DownloadTeamsQrCodesFileRsp\"\x12\x82\xd3\xe4\x93\x02\f\x12\n" + + "/teams/pdf\x12f\n" + + "\bGetGraph\x12$.crabs.evening_detective.GetGraphReq\x1a$.crabs.evening_detective.GetGraphRsp\"\x0e\x82\xd3\xe4\x93\x02\b\x12\x06/graphB\vZ\tpkg/protob\x06proto3" var ( file_main_proto_rawDescOnce sync.Once - file_main_proto_rawDescData = file_main_proto_rawDesc + file_main_proto_rawDescData []byte ) func file_main_proto_rawDescGZIP() []byte { file_main_proto_rawDescOnce.Do(func() { - file_main_proto_rawDescData = protoimpl.X.CompressGZIP(file_main_proto_rawDescData) + file_main_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_main_proto_rawDesc), len(file_main_proto_rawDesc))) }) return file_main_proto_rawDescData } -var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 27) -var file_main_proto_goTypes = []interface{}{ +var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_main_proto_goTypes = []any{ (*PingReq)(nil), // 0: crabs.evening_detective.PingReq (*PingRsp)(nil), // 1: crabs.evening_detective.PingRsp (*AddTeamsReq)(nil), // 2: crabs.evening_detective.AddTeamsReq @@ -1540,6 +1588,10 @@ var file_main_proto_goTypes = []interface{}{ (*GiveApplicationsRsp)(nil), // 24: crabs.evening_detective.GiveApplicationsRsp (*DownloadTeamsQrCodesFileReq)(nil), // 25: crabs.evening_detective.DownloadTeamsQrCodesFileReq (*DownloadTeamsQrCodesFileRsp)(nil), // 26: crabs.evening_detective.DownloadTeamsQrCodesFileRsp + (*GetGraphReq)(nil), // 27: crabs.evening_detective.GetGraphReq + (*GetGraphRsp)(nil), // 28: crabs.evening_detective.GetGraphRsp + (*GetGraphRsp_Node)(nil), // 29: crabs.evening_detective.GetGraphRsp.Node + (*GetGraphRsp_Edge)(nil), // 30: crabs.evening_detective.GetGraphRsp.Edge } var file_main_proto_depIdxs = []int32{ 3, // 0: crabs.evening_detective.AddTeamsReq.teams:type_name -> crabs.evening_detective.Team @@ -1549,33 +1601,37 @@ var file_main_proto_depIdxs = []int32{ 16, // 4: crabs.evening_detective.GetTeamRsp.actions:type_name -> crabs.evening_detective.Action 11, // 5: crabs.evening_detective.Action.applications:type_name -> crabs.evening_detective.Application 11, // 6: crabs.evening_detective.GiveApplicationsReq.applications:type_name -> crabs.evening_detective.Application - 0, // 7: crabs.evening_detective.EveningDetective.Ping:input_type -> crabs.evening_detective.PingReq - 2, // 8: crabs.evening_detective.EveningDetective.AddTeams:input_type -> crabs.evening_detective.AddTeamsReq - 6, // 9: crabs.evening_detective.EveningDetective.GetTeams:input_type -> crabs.evening_detective.GetTeamsReq - 8, // 10: crabs.evening_detective.EveningDetective.GetTeamsCSV:input_type -> crabs.evening_detective.GetTeamsCSVReq - 12, // 11: crabs.evening_detective.EveningDetective.GetTeam:input_type -> crabs.evening_detective.GetTeamReq - 14, // 12: crabs.evening_detective.EveningDetective.AddAction:input_type -> crabs.evening_detective.AddActionReq - 17, // 13: crabs.evening_detective.EveningDetective.GetGame:input_type -> crabs.evening_detective.GetGameReq - 19, // 14: crabs.evening_detective.EveningDetective.GameStart:input_type -> crabs.evening_detective.GameStartReq - 21, // 15: crabs.evening_detective.EveningDetective.GameStop:input_type -> crabs.evening_detective.GameStopReq - 23, // 16: crabs.evening_detective.EveningDetective.GiveApplications:input_type -> crabs.evening_detective.GiveApplicationsReq - 25, // 17: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:input_type -> crabs.evening_detective.DownloadTeamsQrCodesFileReq - 1, // 18: crabs.evening_detective.EveningDetective.Ping:output_type -> crabs.evening_detective.PingRsp - 4, // 19: crabs.evening_detective.EveningDetective.AddTeams:output_type -> crabs.evening_detective.AddTeamsRsp - 7, // 20: crabs.evening_detective.EveningDetective.GetTeams:output_type -> crabs.evening_detective.GetTeamsRsp - 9, // 21: crabs.evening_detective.EveningDetective.GetTeamsCSV:output_type -> crabs.evening_detective.GetTeamsCSVRsp - 13, // 22: crabs.evening_detective.EveningDetective.GetTeam:output_type -> crabs.evening_detective.GetTeamRsp - 15, // 23: crabs.evening_detective.EveningDetective.AddAction:output_type -> crabs.evening_detective.AddActionRsp - 18, // 24: crabs.evening_detective.EveningDetective.GetGame:output_type -> crabs.evening_detective.GetGameRsp - 20, // 25: crabs.evening_detective.EveningDetective.GameStart:output_type -> crabs.evening_detective.GameStartRsp - 22, // 26: crabs.evening_detective.EveningDetective.GameStop:output_type -> crabs.evening_detective.GameStopRsp - 24, // 27: crabs.evening_detective.EveningDetective.GiveApplications:output_type -> crabs.evening_detective.GiveApplicationsRsp - 26, // 28: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:output_type -> crabs.evening_detective.DownloadTeamsQrCodesFileRsp - 18, // [18:29] is the sub-list for method output_type - 7, // [7:18] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 29, // 7: crabs.evening_detective.GetGraphRsp.nodes:type_name -> crabs.evening_detective.GetGraphRsp.Node + 30, // 8: crabs.evening_detective.GetGraphRsp.edges:type_name -> crabs.evening_detective.GetGraphRsp.Edge + 0, // 9: crabs.evening_detective.EveningDetective.Ping:input_type -> crabs.evening_detective.PingReq + 2, // 10: crabs.evening_detective.EveningDetective.AddTeams:input_type -> crabs.evening_detective.AddTeamsReq + 6, // 11: crabs.evening_detective.EveningDetective.GetTeams:input_type -> crabs.evening_detective.GetTeamsReq + 8, // 12: crabs.evening_detective.EveningDetective.GetTeamsCSV:input_type -> crabs.evening_detective.GetTeamsCSVReq + 12, // 13: crabs.evening_detective.EveningDetective.GetTeam:input_type -> crabs.evening_detective.GetTeamReq + 14, // 14: crabs.evening_detective.EveningDetective.AddAction:input_type -> crabs.evening_detective.AddActionReq + 17, // 15: crabs.evening_detective.EveningDetective.GetGame:input_type -> crabs.evening_detective.GetGameReq + 19, // 16: crabs.evening_detective.EveningDetective.GameStart:input_type -> crabs.evening_detective.GameStartReq + 21, // 17: crabs.evening_detective.EveningDetective.GameStop:input_type -> crabs.evening_detective.GameStopReq + 23, // 18: crabs.evening_detective.EveningDetective.GiveApplications:input_type -> crabs.evening_detective.GiveApplicationsReq + 25, // 19: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:input_type -> crabs.evening_detective.DownloadTeamsQrCodesFileReq + 27, // 20: crabs.evening_detective.EveningDetective.GetGraph:input_type -> crabs.evening_detective.GetGraphReq + 1, // 21: crabs.evening_detective.EveningDetective.Ping:output_type -> crabs.evening_detective.PingRsp + 4, // 22: crabs.evening_detective.EveningDetective.AddTeams:output_type -> crabs.evening_detective.AddTeamsRsp + 7, // 23: crabs.evening_detective.EveningDetective.GetTeams:output_type -> crabs.evening_detective.GetTeamsRsp + 9, // 24: crabs.evening_detective.EveningDetective.GetTeamsCSV:output_type -> crabs.evening_detective.GetTeamsCSVRsp + 13, // 25: crabs.evening_detective.EveningDetective.GetTeam:output_type -> crabs.evening_detective.GetTeamRsp + 15, // 26: crabs.evening_detective.EveningDetective.AddAction:output_type -> crabs.evening_detective.AddActionRsp + 18, // 27: crabs.evening_detective.EveningDetective.GetGame:output_type -> crabs.evening_detective.GetGameRsp + 20, // 28: crabs.evening_detective.EveningDetective.GameStart:output_type -> crabs.evening_detective.GameStartRsp + 22, // 29: crabs.evening_detective.EveningDetective.GameStop:output_type -> crabs.evening_detective.GameStopRsp + 24, // 30: crabs.evening_detective.EveningDetective.GiveApplications:output_type -> crabs.evening_detective.GiveApplicationsRsp + 26, // 31: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:output_type -> crabs.evening_detective.DownloadTeamsQrCodesFileRsp + 28, // 32: crabs.evening_detective.EveningDetective.GetGraph:output_type -> crabs.evening_detective.GetGraphRsp + 21, // [21:33] is the sub-list for method output_type + 9, // [9:21] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_main_proto_init() } @@ -1583,339 +1639,13 @@ func file_main_proto_init() { if File_main_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_main_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddTeamsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Team); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddTeamsRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TeamFull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTeamsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTeamsRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTeamsCSVReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTeamsCSVRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TeamAdvanced); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Application); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTeamReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTeamRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddActionReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddActionRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGameReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGameRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameStartReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameStartRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameStopReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameStopRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GiveApplicationsReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GiveApplicationsRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadTeamsQrCodesFileReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_main_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadTeamsQrCodesFileRsp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_main_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_main_proto_rawDesc), len(file_main_proto_rawDesc)), NumEnums: 0, - NumMessages: 27, + NumMessages: 31, NumExtensions: 0, NumServices: 1, }, @@ -1924,7 +1654,6 @@ func file_main_proto_init() { MessageInfos: file_main_proto_msgTypes, }.Build() File_main_proto = out.File - file_main_proto_rawDesc = nil file_main_proto_goTypes = nil file_main_proto_depIdxs = nil } diff --git a/proto/main.pb.gw.go b/proto/main.pb.gw.go index bcc878c..9d63337 100644 --- a/proto/main.pb.gw.go +++ b/proto/main.pb.gw.go @@ -10,6 +10,7 @@ package proto import ( "context" + "errors" "io" "net/http" @@ -24,300 +25,329 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_EveningDetective_Ping_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PingReq - var metadata runtime.ServerMetadata - + var ( + protoReq PingReq + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.Ping(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_Ping_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PingReq - var metadata runtime.ServerMetadata - + var ( + protoReq PingReq + metadata runtime.ServerMetadata + ) msg, err := server.Ping(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_AddTeams_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddTeamsReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddTeamsReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.AddTeams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_AddTeams_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddTeamsReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddTeamsReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AddTeams(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_GetTeams_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTeamsReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetTeamsReq + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.GetTeams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_GetTeams_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTeamsReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetTeamsReq + metadata runtime.ServerMetadata + ) msg, err := server.GetTeams(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_GetTeamsCSV_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTeamsCSVReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetTeamsCSVReq + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.GetTeamsCSV(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_GetTeamsCSV_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTeamsCSVReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetTeamsCSVReq + metadata runtime.ServerMetadata + ) msg, err := server.GetTeamsCSV(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_GetTeam_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTeamReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetTeamReq + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.GetTeam(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_GetTeam_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTeamReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetTeamReq + metadata runtime.ServerMetadata + ) msg, err := server.GetTeam(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_AddAction_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddActionReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddActionReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.AddAction(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_AddAction_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddActionReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddActionReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AddAction(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_GetGame_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetGameReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetGameReq + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.GetGame(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_GetGame_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetGameReq - var metadata runtime.ServerMetadata - + var ( + protoReq GetGameReq + metadata runtime.ServerMetadata + ) msg, err := server.GetGame(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_GameStart_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GameStartReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq GameStartReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.GameStart(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_GameStart_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GameStartReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq GameStartReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GameStart(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_GameStop_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GameStopReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq GameStopReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.GameStop(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_GameStop_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GameStopReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq GameStopReq + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GameStop(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_GiveApplications_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GiveApplicationsReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq GiveApplicationsReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["teamId"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["teamId"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "teamId") } - protoReq.TeamId, err = runtime.Int64(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "teamId", err) } - msg, err := client.GiveApplications(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_GiveApplications_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GiveApplicationsReq - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq GiveApplicationsReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["teamId"] + val, ok := pathParams["teamId"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "teamId") } - protoReq.TeamId, err = runtime.Int64(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "teamId", err) } - msg, err := server.GiveApplications(ctx, &protoReq) return msg, metadata, err - } func request_EveningDetective_DownloadTeamsQrCodesFile_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DownloadTeamsQrCodesFileReq - var metadata runtime.ServerMetadata - + var ( + protoReq DownloadTeamsQrCodesFileReq + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.DownloadTeamsQrCodesFile(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_EveningDetective_DownloadTeamsQrCodesFile_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DownloadTeamsQrCodesFileReq - var metadata runtime.ServerMetadata - + var ( + protoReq DownloadTeamsQrCodesFileReq + metadata runtime.ServerMetadata + ) msg, err := server.DownloadTeamsQrCodesFile(ctx, &protoReq) return msg, metadata, err +} +func request_EveningDetective_GetGraph_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetGraphReq + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + msg, err := client.GetGraph(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetective_GetGraph_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetGraphReq + metadata runtime.ServerMetadata + ) + msg, err := server.GetGraph(ctx, &protoReq) + return msg, metadata, err } // RegisterEveningDetectiveHandlerServer registers the http handlers for service EveningDetective to "mux". // UnaryRPC :call EveningDetectiveServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterEveningDetectiveHandlerFromEndpoint instead. +// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EveningDetectiveServer) error { - - mux.Handle("GET", pattern_EveningDetective_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/Ping", runtime.WithHTTPPathPattern("/ping")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/Ping", runtime.WithHTTPPathPattern("/ping")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -329,20 +359,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_Ping_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_AddTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_AddTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddTeams", runtime.WithHTTPPathPattern("/teams")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddTeams", runtime.WithHTTPPathPattern("/teams")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -354,20 +379,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_AddTeams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeams", runtime.WithHTTPPathPattern("/teams")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeams", runtime.WithHTTPPathPattern("/teams")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -379,20 +399,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetTeams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetTeamsCSV_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetTeamsCSV_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeamsCSV", runtime.WithHTTPPathPattern("/csv")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeamsCSV", runtime.WithHTTPPathPattern("/csv")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -404,20 +419,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetTeamsCSV_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeam", runtime.WithHTTPPathPattern("/team")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeam", runtime.WithHTTPPathPattern("/team")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -429,20 +439,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetTeam_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_AddAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_AddAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddAction", runtime.WithHTTPPathPattern("/team/actions")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddAction", runtime.WithHTTPPathPattern("/team/actions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -454,20 +459,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_AddAction_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetGame_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetGame_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetGame", runtime.WithHTTPPathPattern("/game")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetGame", runtime.WithHTTPPathPattern("/game")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -479,20 +479,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetGame_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_GameStart_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_GameStart_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStart", runtime.WithHTTPPathPattern("/game/start")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStart", runtime.WithHTTPPathPattern("/game/start")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -504,20 +499,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GameStart_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_GameStop_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_GameStop_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStop", runtime.WithHTTPPathPattern("/game/stop")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStop", runtime.WithHTTPPathPattern("/game/stop")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -529,20 +519,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GameStop_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_GiveApplications_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_GiveApplications_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GiveApplications", runtime.WithHTTPPathPattern("/teams/{teamId}/applications")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GiveApplications", runtime.WithHTTPPathPattern("/teams/{teamId}/applications")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -554,20 +539,15 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GiveApplications_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_DownloadTeamsQrCodesFile_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_DownloadTeamsQrCodesFile_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/DownloadTeamsQrCodesFile", runtime.WithHTTPPathPattern("/teams/pdf")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/DownloadTeamsQrCodesFile", runtime.WithHTTPPathPattern("/teams/pdf")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -579,9 +559,27 @@ func RegisterEveningDetectiveHandlerServer(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_DownloadTeamsQrCodesFile_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - + }) + mux.Handle(http.MethodGet, pattern_EveningDetective_GetGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetGraph", runtime.WithHTTPPathPattern("/graph")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetective_GetGraph_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetective_GetGraph_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) return nil @@ -608,7 +606,6 @@ func RegisterEveningDetectiveHandlerFromEndpoint(ctx context.Context, mux *runti } }() }() - return RegisterEveningDetectiveHandler(ctx, mux, conn) } @@ -622,16 +619,13 @@ func RegisterEveningDetectiveHandler(ctx context.Context, mux *runtime.ServeMux, // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "EveningDetectiveClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "EveningDetectiveClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "EveningDetectiveClient" to call the correct interceptors. +// "EveningDetectiveClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.ServeMux, client EveningDetectiveClient) error { - - mux.Handle("GET", pattern_EveningDetective_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/Ping", runtime.WithHTTPPathPattern("/ping")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/Ping", runtime.WithHTTPPathPattern("/ping")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -642,18 +636,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_Ping_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_AddTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_AddTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddTeams", runtime.WithHTTPPathPattern("/teams")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddTeams", runtime.WithHTTPPathPattern("/teams")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -664,18 +653,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_AddTeams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetTeams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeams", runtime.WithHTTPPathPattern("/teams")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeams", runtime.WithHTTPPathPattern("/teams")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -686,18 +670,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetTeams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetTeamsCSV_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetTeamsCSV_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeamsCSV", runtime.WithHTTPPathPattern("/csv")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeamsCSV", runtime.WithHTTPPathPattern("/csv")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -708,18 +687,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetTeamsCSV_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeam", runtime.WithHTTPPathPattern("/team")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetTeam", runtime.WithHTTPPathPattern("/team")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -730,18 +704,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetTeam_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_AddAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_AddAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddAction", runtime.WithHTTPPathPattern("/team/actions")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/AddAction", runtime.WithHTTPPathPattern("/team/actions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -752,18 +721,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_AddAction_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_GetGame_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_GetGame_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetGame", runtime.WithHTTPPathPattern("/game")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetGame", runtime.WithHTTPPathPattern("/game")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -774,18 +738,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GetGame_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_GameStart_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_GameStart_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStart", runtime.WithHTTPPathPattern("/game/start")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStart", runtime.WithHTTPPathPattern("/game/start")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -796,18 +755,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GameStart_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_GameStop_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_GameStop_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStop", runtime.WithHTTPPathPattern("/game/stop")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GameStop", runtime.WithHTTPPathPattern("/game/stop")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -818,18 +772,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GameStop_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_EveningDetective_GiveApplications_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_EveningDetective_GiveApplications_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GiveApplications", runtime.WithHTTPPathPattern("/teams/{teamId}/applications")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GiveApplications", runtime.WithHTTPPathPattern("/teams/{teamId}/applications")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -840,18 +789,13 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_GiveApplications_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_EveningDetective_DownloadTeamsQrCodesFile_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_EveningDetective_DownloadTeamsQrCodesFile_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/DownloadTeamsQrCodesFile", runtime.WithHTTPPathPattern("/teams/pdf")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/DownloadTeamsQrCodesFile", runtime.WithHTTPPathPattern("/teams/pdf")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -862,58 +806,54 @@ func RegisterEveningDetectiveHandlerClient(ctx context.Context, mux *runtime.Ser runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EveningDetective_DownloadTeamsQrCodesFile_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - + mux.Handle(http.MethodGet, pattern_EveningDetective_GetGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective.EveningDetective/GetGraph", runtime.WithHTTPPathPattern("/graph")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetective_GetGraph_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetective_GetGraph_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil } var ( - pattern_EveningDetective_Ping_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"ping"}, "")) - - pattern_EveningDetective_AddTeams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"teams"}, "")) - - pattern_EveningDetective_GetTeams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"teams"}, "")) - - pattern_EveningDetective_GetTeamsCSV_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"csv"}, "")) - - pattern_EveningDetective_GetTeam_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"team"}, "")) - - pattern_EveningDetective_AddAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"team", "actions"}, "")) - - pattern_EveningDetective_GetGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"game"}, "")) - - pattern_EveningDetective_GameStart_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"game", "start"}, "")) - - pattern_EveningDetective_GameStop_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"game", "stop"}, "")) - - pattern_EveningDetective_GiveApplications_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"teams", "teamId", "applications"}, "")) - + pattern_EveningDetective_Ping_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"ping"}, "")) + pattern_EveningDetective_AddTeams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"teams"}, "")) + pattern_EveningDetective_GetTeams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"teams"}, "")) + pattern_EveningDetective_GetTeamsCSV_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"csv"}, "")) + pattern_EveningDetective_GetTeam_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"team"}, "")) + pattern_EveningDetective_AddAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"team", "actions"}, "")) + pattern_EveningDetective_GetGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"game"}, "")) + pattern_EveningDetective_GameStart_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"game", "start"}, "")) + pattern_EveningDetective_GameStop_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"game", "stop"}, "")) + pattern_EveningDetective_GiveApplications_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"teams", "teamId", "applications"}, "")) pattern_EveningDetective_DownloadTeamsQrCodesFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"teams", "pdf"}, "")) + pattern_EveningDetective_GetGraph_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"graph"}, "")) ) var ( - forward_EveningDetective_Ping_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_AddTeams_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_GetTeams_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_GetTeamsCSV_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_GetTeam_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_AddAction_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_GetGame_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_GameStart_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_GameStop_0 = runtime.ForwardResponseMessage - - forward_EveningDetective_GiveApplications_0 = runtime.ForwardResponseMessage - + forward_EveningDetective_Ping_0 = runtime.ForwardResponseMessage + forward_EveningDetective_AddTeams_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GetTeams_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GetTeamsCSV_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GetTeam_0 = runtime.ForwardResponseMessage + forward_EveningDetective_AddAction_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GetGame_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GameStart_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GameStop_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GiveApplications_0 = runtime.ForwardResponseMessage forward_EveningDetective_DownloadTeamsQrCodesFile_0 = runtime.ForwardResponseMessage + forward_EveningDetective_GetGraph_0 = runtime.ForwardResponseMessage ) diff --git a/proto/main.swagger.json b/proto/main.swagger.json index e187751..8197de2 100644 --- a/proto/main.swagger.json +++ b/proto/main.swagger.json @@ -119,6 +119,28 @@ ] } }, + "/graph": { + "get": { + "operationId": "EveningDetective_GetGraph", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detectiveGetGraphRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "tags": [ + "EveningDetective" + ] + } + }, "/ping": { "get": { "operationId": "EveningDetective_Ping", @@ -310,6 +332,34 @@ } }, "definitions": { + "GetGraphRspEdge": { + "type": "object", + "properties": { + "from": { + "type": "integer", + "format": "int32" + }, + "to": { + "type": "integer", + "format": "int32" + }, + "arrows": { + "type": "string" + } + } + }, + "GetGraphRspNode": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string" + } + } + }, "evening_detectiveAction": { "type": "object", "properties": { @@ -423,6 +473,23 @@ } } }, + "evening_detectiveGetGraphRsp": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "$ref": "#/definitions/GetGraphRspNode" + } + }, + "edges": { + "type": "array", + "items": { + "$ref": "#/definitions/GetGraphRspEdge" + } + } + } + }, "evening_detectiveGetTeamRsp": { "type": "object", "properties": { diff --git a/proto/main_grpc.pb.go b/proto/main_grpc.pb.go index 023c90b..1334819 100644 --- a/proto/main_grpc.pb.go +++ b/proto/main_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.32.1 // source: main.proto package proto @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( EveningDetective_Ping_FullMethodName = "/crabs.evening_detective.EveningDetective/Ping" @@ -30,6 +30,7 @@ const ( EveningDetective_GameStop_FullMethodName = "/crabs.evening_detective.EveningDetective/GameStop" EveningDetective_GiveApplications_FullMethodName = "/crabs.evening_detective.EveningDetective/GiveApplications" EveningDetective_DownloadTeamsQrCodesFile_FullMethodName = "/crabs.evening_detective.EveningDetective/DownloadTeamsQrCodesFile" + EveningDetective_GetGraph_FullMethodName = "/crabs.evening_detective.EveningDetective/GetGraph" ) // EveningDetectiveClient is the client API for EveningDetective service. @@ -47,6 +48,7 @@ type EveningDetectiveClient interface { GameStop(ctx context.Context, in *GameStopReq, opts ...grpc.CallOption) (*GameStopRsp, error) GiveApplications(ctx context.Context, in *GiveApplicationsReq, opts ...grpc.CallOption) (*GiveApplicationsRsp, error) DownloadTeamsQrCodesFile(ctx context.Context, in *DownloadTeamsQrCodesFileReq, opts ...grpc.CallOption) (*DownloadTeamsQrCodesFileRsp, error) + GetGraph(ctx context.Context, in *GetGraphReq, opts ...grpc.CallOption) (*GetGraphRsp, error) } type eveningDetectiveClient struct { @@ -58,8 +60,9 @@ func NewEveningDetectiveClient(cc grpc.ClientConnInterface) EveningDetectiveClie } func (c *eveningDetectiveClient) Ping(ctx context.Context, in *PingReq, opts ...grpc.CallOption) (*PingRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(PingRsp) - err := c.cc.Invoke(ctx, EveningDetective_Ping_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_Ping_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -67,8 +70,9 @@ func (c *eveningDetectiveClient) Ping(ctx context.Context, in *PingReq, opts ... } func (c *eveningDetectiveClient) AddTeams(ctx context.Context, in *AddTeamsReq, opts ...grpc.CallOption) (*AddTeamsRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(AddTeamsRsp) - err := c.cc.Invoke(ctx, EveningDetective_AddTeams_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_AddTeams_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -76,8 +80,9 @@ func (c *eveningDetectiveClient) AddTeams(ctx context.Context, in *AddTeamsReq, } func (c *eveningDetectiveClient) GetTeams(ctx context.Context, in *GetTeamsReq, opts ...grpc.CallOption) (*GetTeamsRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetTeamsRsp) - err := c.cc.Invoke(ctx, EveningDetective_GetTeams_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_GetTeams_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -85,8 +90,9 @@ func (c *eveningDetectiveClient) GetTeams(ctx context.Context, in *GetTeamsReq, } func (c *eveningDetectiveClient) GetTeamsCSV(ctx context.Context, in *GetTeamsCSVReq, opts ...grpc.CallOption) (*GetTeamsCSVRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetTeamsCSVRsp) - err := c.cc.Invoke(ctx, EveningDetective_GetTeamsCSV_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_GetTeamsCSV_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -94,8 +100,9 @@ func (c *eveningDetectiveClient) GetTeamsCSV(ctx context.Context, in *GetTeamsCS } func (c *eveningDetectiveClient) GetTeam(ctx context.Context, in *GetTeamReq, opts ...grpc.CallOption) (*GetTeamRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetTeamRsp) - err := c.cc.Invoke(ctx, EveningDetective_GetTeam_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_GetTeam_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -103,8 +110,9 @@ func (c *eveningDetectiveClient) GetTeam(ctx context.Context, in *GetTeamReq, op } func (c *eveningDetectiveClient) AddAction(ctx context.Context, in *AddActionReq, opts ...grpc.CallOption) (*AddActionRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(AddActionRsp) - err := c.cc.Invoke(ctx, EveningDetective_AddAction_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_AddAction_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -112,8 +120,9 @@ func (c *eveningDetectiveClient) AddAction(ctx context.Context, in *AddActionReq } func (c *eveningDetectiveClient) GetGame(ctx context.Context, in *GetGameReq, opts ...grpc.CallOption) (*GetGameRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetGameRsp) - err := c.cc.Invoke(ctx, EveningDetective_GetGame_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_GetGame_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -121,8 +130,9 @@ func (c *eveningDetectiveClient) GetGame(ctx context.Context, in *GetGameReq, op } func (c *eveningDetectiveClient) GameStart(ctx context.Context, in *GameStartReq, opts ...grpc.CallOption) (*GameStartRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GameStartRsp) - err := c.cc.Invoke(ctx, EveningDetective_GameStart_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_GameStart_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -130,8 +140,9 @@ func (c *eveningDetectiveClient) GameStart(ctx context.Context, in *GameStartReq } func (c *eveningDetectiveClient) GameStop(ctx context.Context, in *GameStopReq, opts ...grpc.CallOption) (*GameStopRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GameStopRsp) - err := c.cc.Invoke(ctx, EveningDetective_GameStop_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_GameStop_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -139,8 +150,9 @@ func (c *eveningDetectiveClient) GameStop(ctx context.Context, in *GameStopReq, } func (c *eveningDetectiveClient) GiveApplications(ctx context.Context, in *GiveApplicationsReq, opts ...grpc.CallOption) (*GiveApplicationsRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GiveApplicationsRsp) - err := c.cc.Invoke(ctx, EveningDetective_GiveApplications_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_GiveApplications_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -148,8 +160,19 @@ func (c *eveningDetectiveClient) GiveApplications(ctx context.Context, in *GiveA } func (c *eveningDetectiveClient) DownloadTeamsQrCodesFile(ctx context.Context, in *DownloadTeamsQrCodesFileReq, opts ...grpc.CallOption) (*DownloadTeamsQrCodesFileRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DownloadTeamsQrCodesFileRsp) - err := c.cc.Invoke(ctx, EveningDetective_DownloadTeamsQrCodesFile_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, EveningDetective_DownloadTeamsQrCodesFile_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveClient) GetGraph(ctx context.Context, in *GetGraphReq, opts ...grpc.CallOption) (*GetGraphRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetGraphRsp) + err := c.cc.Invoke(ctx, EveningDetective_GetGraph_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -158,7 +181,7 @@ func (c *eveningDetectiveClient) DownloadTeamsQrCodesFile(ctx context.Context, i // EveningDetectiveServer is the server API for EveningDetective service. // All implementations must embed UnimplementedEveningDetectiveServer -// for forward compatibility +// for forward compatibility. type EveningDetectiveServer interface { Ping(context.Context, *PingReq) (*PingRsp, error) AddTeams(context.Context, *AddTeamsReq) (*AddTeamsRsp, error) @@ -171,12 +194,16 @@ type EveningDetectiveServer interface { GameStop(context.Context, *GameStopReq) (*GameStopRsp, error) GiveApplications(context.Context, *GiveApplicationsReq) (*GiveApplicationsRsp, error) DownloadTeamsQrCodesFile(context.Context, *DownloadTeamsQrCodesFileReq) (*DownloadTeamsQrCodesFileRsp, error) + GetGraph(context.Context, *GetGraphReq) (*GetGraphRsp, error) mustEmbedUnimplementedEveningDetectiveServer() } -// UnimplementedEveningDetectiveServer must be embedded to have forward compatible implementations. -type UnimplementedEveningDetectiveServer struct { -} +// UnimplementedEveningDetectiveServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedEveningDetectiveServer struct{} func (UnimplementedEveningDetectiveServer) Ping(context.Context, *PingReq) (*PingRsp, error) { return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") @@ -211,7 +238,11 @@ func (UnimplementedEveningDetectiveServer) GiveApplications(context.Context, *Gi func (UnimplementedEveningDetectiveServer) DownloadTeamsQrCodesFile(context.Context, *DownloadTeamsQrCodesFileReq) (*DownloadTeamsQrCodesFileRsp, error) { return nil, status.Errorf(codes.Unimplemented, "method DownloadTeamsQrCodesFile not implemented") } +func (UnimplementedEveningDetectiveServer) GetGraph(context.Context, *GetGraphReq) (*GetGraphRsp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGraph not implemented") +} func (UnimplementedEveningDetectiveServer) mustEmbedUnimplementedEveningDetectiveServer() {} +func (UnimplementedEveningDetectiveServer) testEmbeddedByValue() {} // UnsafeEveningDetectiveServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to EveningDetectiveServer will @@ -221,6 +252,13 @@ type UnsafeEveningDetectiveServer interface { } func RegisterEveningDetectiveServer(s grpc.ServiceRegistrar, srv EveningDetectiveServer) { + // If the following call pancis, it indicates UnimplementedEveningDetectiveServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&EveningDetective_ServiceDesc, srv) } @@ -422,6 +460,24 @@ func _EveningDetective_DownloadTeamsQrCodesFile_Handler(srv interface{}, ctx con return interceptor(ctx, in, info, handler) } +func _EveningDetective_GetGraph_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGraphReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServer).GetGraph(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetective_GetGraph_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServer).GetGraph(ctx, req.(*GetGraphReq)) + } + return interceptor(ctx, in, info, handler) +} + // EveningDetective_ServiceDesc is the grpc.ServiceDesc for EveningDetective service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -473,6 +529,10 @@ var EveningDetective_ServiceDesc = grpc.ServiceDesc{ MethodName: "DownloadTeamsQrCodesFile", Handler: _EveningDetective_DownloadTeamsQrCodesFile_Handler, }, + { + MethodName: "GetGraph", + Handler: _EveningDetective_GetGraph_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "main.proto",