Serenity Operating System
at master 125 lines 4.2 kB view raw
1/* 2 * Copyright (c) 2020, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/DeprecatedString.h> 10#include <AK/Types.h> 11#include <LibCpp/Parser.h> 12#include <LibGUI/AutocompleteProvider.h> 13#include <LibIPC/Decoder.h> 14#include <LibIPC/Encoder.h> 15 16namespace IPC { 17 18template<> 19inline ErrorOr<void> encode(Encoder& encoder, CodeComprehension::AutocompleteResultEntry const& response) 20{ 21 TRY(encoder.encode(response.completion)); 22 TRY(encoder.encode(response.partial_input_length)); 23 TRY(encoder.encode(response.language)); 24 TRY(encoder.encode(response.display_text)); 25 TRY(encoder.encode(response.hide_autocomplete_after_applying)); 26 return {}; 27} 28 29template<> 30inline ErrorOr<CodeComprehension::AutocompleteResultEntry> decode(Decoder& decoder) 31{ 32 auto completion = TRY(decoder.decode<DeprecatedString>()); 33 auto partial_input_length = TRY(decoder.decode<size_t>()); 34 auto language = TRY(decoder.decode<CodeComprehension::Language>()); 35 auto display_text = TRY(decoder.decode<DeprecatedString>()); 36 auto hide_autocomplete_after_applying = TRY(decoder.decode<CodeComprehension::AutocompleteResultEntry::HideAutocompleteAfterApplying>()); 37 38 return CodeComprehension::AutocompleteResultEntry { move(completion), partial_input_length, language, move(display_text), hide_autocomplete_after_applying }; 39} 40 41template<> 42inline ErrorOr<void> encode(Encoder& encoder, CodeComprehension::ProjectLocation const& location) 43{ 44 TRY(encoder.encode(location.file)); 45 TRY(encoder.encode(location.line)); 46 TRY(encoder.encode(location.column)); 47 return {}; 48} 49 50template<> 51inline ErrorOr<CodeComprehension::ProjectLocation> decode(Decoder& decoder) 52{ 53 auto file = TRY(decoder.decode<DeprecatedString>()); 54 auto line = TRY(decoder.decode<size_t>()); 55 auto column = TRY(decoder.decode<size_t>()); 56 57 return CodeComprehension::ProjectLocation { move(file), line, column }; 58} 59 60template<> 61inline ErrorOr<void> encode(Encoder& encoder, CodeComprehension::Declaration const& declaration) 62{ 63 TRY(encoder.encode(declaration.name)); 64 TRY(encoder.encode(declaration.position)); 65 TRY(encoder.encode(declaration.type)); 66 TRY(encoder.encode(declaration.scope)); 67 return {}; 68} 69 70template<> 71inline ErrorOr<CodeComprehension::Declaration> decode(Decoder& decoder) 72{ 73 auto name = TRY(decoder.decode<DeprecatedString>()); 74 auto position = TRY(decoder.decode<CodeComprehension::ProjectLocation>()); 75 auto type = TRY(decoder.decode<CodeComprehension::DeclarationType>()); 76 auto scope = TRY(decoder.decode<DeprecatedString>()); 77 78 return CodeComprehension::Declaration { move(name), position, type, move(scope) }; 79} 80 81template<> 82inline ErrorOr<void> encode(Encoder& encoder, CodeComprehension::TodoEntry const& entry) 83{ 84 TRY(encoder.encode(entry.content)); 85 TRY(encoder.encode(entry.filename)); 86 TRY(encoder.encode(entry.line)); 87 TRY(encoder.encode(entry.column)); 88 return {}; 89} 90 91template<> 92inline ErrorOr<CodeComprehension::TodoEntry> decode(Decoder& decoder) 93{ 94 auto content = TRY(decoder.decode<DeprecatedString>()); 95 auto filename = TRY(decoder.decode<DeprecatedString>()); 96 auto line = TRY(decoder.decode<size_t>()); 97 auto column = TRY(decoder.decode<size_t>()); 98 99 return CodeComprehension::TodoEntry { move(content), move(filename), line, column }; 100} 101 102template<> 103inline ErrorOr<void> encode(Encoder& encoder, CodeComprehension::TokenInfo const& location) 104{ 105 TRY(encoder.encode(location.type)); 106 TRY(encoder.encode(location.start_line)); 107 TRY(encoder.encode(location.start_column)); 108 TRY(encoder.encode(location.end_line)); 109 TRY(encoder.encode(location.end_column)); 110 return {}; 111} 112 113template<> 114inline ErrorOr<CodeComprehension::TokenInfo> decode(Decoder& decoder) 115{ 116 auto type = TRY(decoder.decode<CodeComprehension::TokenInfo::SemanticType>()); 117 auto start_line = TRY(decoder.decode<size_t>()); 118 auto start_column = TRY(decoder.decode<size_t>()); 119 auto end_line = TRY(decoder.decode<size_t>()); 120 auto end_column = TRY(decoder.decode<size_t>()); 121 122 return CodeComprehension::TokenInfo { type, start_line, start_column, end_line, end_column }; 123} 124 125}