AutoCompleteResponse.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * Copyright (c) 2020, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/String.h>
  8. #include <AK/Types.h>
  9. #include <LibCpp/Parser.h>
  10. #include <LibGUI/AutocompleteProvider.h>
  11. #include <LibIPC/Decoder.h>
  12. #include <LibIPC/Encoder.h>
  13. namespace IPC {
  14. template<>
  15. inline bool encode(IPC::Encoder& encoder, const GUI::AutocompleteProvider::Entry& response)
  16. {
  17. encoder << response.completion;
  18. encoder << response.partial_input_length;
  19. encoder << response.language;
  20. encoder << response.display_text;
  21. encoder << response.hide_autocomplete_after_applying;
  22. return true;
  23. }
  24. template<>
  25. inline ErrorOr<void> decode(IPC::Decoder& decoder, GUI::AutocompleteProvider::Entry& response)
  26. {
  27. TRY(decoder.decode(response.completion));
  28. TRY(decoder.decode(response.partial_input_length));
  29. TRY(decoder.decode(response.language));
  30. TRY(decoder.decode(response.display_text));
  31. TRY(decoder.decode(response.hide_autocomplete_after_applying));
  32. return {};
  33. }
  34. template<>
  35. inline bool encode(Encoder& encoder, const GUI::AutocompleteProvider::ProjectLocation& location)
  36. {
  37. encoder << location.file;
  38. encoder << location.line;
  39. encoder << location.column;
  40. return true;
  41. }
  42. template<>
  43. inline ErrorOr<void> decode(Decoder& decoder, GUI::AutocompleteProvider::ProjectLocation& location)
  44. {
  45. TRY(decoder.decode(location.file));
  46. TRY(decoder.decode(location.line));
  47. TRY(decoder.decode(location.column));
  48. return {};
  49. }
  50. template<>
  51. inline bool encode(Encoder& encoder, const GUI::AutocompleteProvider::Declaration& declaration)
  52. {
  53. encoder << declaration.name;
  54. if (!encode(encoder, declaration.position))
  55. return false;
  56. encoder << declaration.type;
  57. encoder << declaration.scope;
  58. return true;
  59. }
  60. template<>
  61. inline ErrorOr<void> decode(Decoder& decoder, GUI::AutocompleteProvider::Declaration& declaration)
  62. {
  63. TRY(decoder.decode(declaration.name));
  64. TRY(decoder.decode(declaration.position));
  65. TRY(decoder.decode(declaration.type));
  66. TRY(decoder.decode(declaration.scope));
  67. return {};
  68. }
  69. template<>
  70. inline bool encode(Encoder& encoder, Cpp::Parser::TodoEntry const& entry)
  71. {
  72. encoder << entry.content;
  73. encoder << entry.filename;
  74. encoder << entry.line;
  75. encoder << entry.column;
  76. return true;
  77. }
  78. template<>
  79. inline ErrorOr<void> decode(Decoder& decoder, Cpp::Parser::TodoEntry& entry)
  80. {
  81. TRY(decoder.decode(entry.content));
  82. TRY(decoder.decode(entry.filename));
  83. TRY(decoder.decode(entry.line));
  84. TRY(decoder.decode(entry.column));
  85. return {};
  86. }
  87. template<>
  88. inline bool encode(Encoder& encoder, const GUI::AutocompleteProvider::TokenInfo& location)
  89. {
  90. encoder << (u32)location.type;
  91. static_assert(sizeof(location.type) == sizeof(u32));
  92. encoder << location.start_line;
  93. encoder << location.start_column;
  94. encoder << location.end_line;
  95. encoder << location.end_column;
  96. return true;
  97. }
  98. template<>
  99. inline ErrorOr<void> decode(Decoder& decoder, GUI::AutocompleteProvider::TokenInfo& entry)
  100. {
  101. u32 semantic_type { 0 };
  102. static_assert(sizeof(semantic_type) == sizeof(entry.type));
  103. TRY(decoder.decode(semantic_type));
  104. entry.type = static_cast<GUI::AutocompleteProvider::TokenInfo::SemanticType>(semantic_type);
  105. TRY(decoder.decode(entry.start_line));
  106. TRY(decoder.decode(entry.start_column));
  107. TRY(decoder.decode(entry.end_line));
  108. TRY(decoder.decode(entry.end_column));
  109. return {};
  110. }
  111. }