Response.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibIPC/Decoder.h>
  7. #include <LibIPC/Encoder.h>
  8. #include <LibWeb/WebDriver/Response.h>
  9. enum class ResponseType : u8 {
  10. Success,
  11. Error,
  12. };
  13. namespace Web::WebDriver {
  14. Response::Response(JsonValue&& value)
  15. : m_value_or_error(move(value))
  16. {
  17. }
  18. Response::Response(Error&& error)
  19. : m_value_or_error(move(error))
  20. {
  21. }
  22. }
  23. template<>
  24. ErrorOr<void> IPC::encode(Encoder& encoder, Web::WebDriver::Response const& response)
  25. {
  26. return response.visit(
  27. [](Empty) -> ErrorOr<void> { VERIFY_NOT_REACHED(); },
  28. [&](JsonValue const& value) -> ErrorOr<void> {
  29. TRY(encoder.encode(ResponseType::Success));
  30. TRY(encoder.encode(value));
  31. return {};
  32. },
  33. [&](Web::WebDriver::Error const& error) -> ErrorOr<void> {
  34. TRY(encoder.encode(ResponseType::Error));
  35. TRY(encoder.encode(error.http_status));
  36. TRY(encoder.encode(error.error));
  37. TRY(encoder.encode(error.message));
  38. TRY(encoder.encode(error.data));
  39. return {};
  40. });
  41. }
  42. template<>
  43. ErrorOr<Web::WebDriver::Response> IPC::decode(Decoder& decoder)
  44. {
  45. auto type = TRY(decoder.decode<ResponseType>());
  46. switch (type) {
  47. case ResponseType::Success:
  48. return TRY(decoder.decode<JsonValue>());
  49. case ResponseType::Error: {
  50. auto http_status = TRY(decoder.decode<unsigned>());
  51. auto error = TRY(decoder.decode<DeprecatedString>());
  52. auto message = TRY(decoder.decode<DeprecatedString>());
  53. auto data = TRY(decoder.decode<Optional<JsonValue>>());
  54. return Web::WebDriver::Error { http_status, move(error), move(message), move(data) };
  55. }
  56. }
  57. VERIFY_NOT_REACHED();
  58. }