StyleSheetIdentifier.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright (c) 2024, Sam Atkins <sam@ladybird.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "StyleSheetIdentifier.h"
  7. #include <LibIPC/Decoder.h>
  8. #include <LibIPC/Encoder.h>
  9. namespace Web::CSS {
  10. StringView style_sheet_identifier_type_to_string(StyleSheetIdentifier::Type type)
  11. {
  12. switch (type) {
  13. case StyleSheetIdentifier::Type::StyleElement:
  14. return "StyleElement"sv;
  15. case StyleSheetIdentifier::Type::LinkElement:
  16. return "LinkElement"sv;
  17. case StyleSheetIdentifier::Type::ImportRule:
  18. return "ImportRule"sv;
  19. case StyleSheetIdentifier::Type::UserAgent:
  20. return "UserAgent"sv;
  21. case StyleSheetIdentifier::Type::UserStyle:
  22. return "UserStyle"sv;
  23. }
  24. VERIFY_NOT_REACHED();
  25. }
  26. Optional<StyleSheetIdentifier::Type> style_sheet_identifier_type_from_string(StringView string)
  27. {
  28. if (string == "StyleElement"sv)
  29. return StyleSheetIdentifier::Type::StyleElement;
  30. if (string == "LinkElement"sv)
  31. return StyleSheetIdentifier::Type::LinkElement;
  32. if (string == "ImportRule"sv)
  33. return StyleSheetIdentifier::Type::ImportRule;
  34. if (string == "UserAgent"sv)
  35. return StyleSheetIdentifier::Type::UserAgent;
  36. if (string == "UserStyle"sv)
  37. return StyleSheetIdentifier::Type::UserStyle;
  38. return {};
  39. }
  40. }
  41. namespace IPC {
  42. template<>
  43. ErrorOr<void> encode(Encoder& encoder, Web::CSS::StyleSheetIdentifier const& style_sheet_source)
  44. {
  45. TRY(encoder.encode(style_sheet_source.type));
  46. TRY(encoder.encode(style_sheet_source.dom_element_unique_id));
  47. TRY(encoder.encode(style_sheet_source.url));
  48. return {};
  49. }
  50. template<>
  51. ErrorOr<Web::CSS::StyleSheetIdentifier> decode(Decoder& decoder)
  52. {
  53. auto type = TRY(decoder.decode<Web::CSS::StyleSheetIdentifier::Type>());
  54. auto dom_element_unique_id = TRY(decoder.decode<Optional<i32>>());
  55. auto url = TRY(decoder.decode<Optional<String>>());
  56. return Web::CSS::StyleSheetIdentifier {
  57. .type = type,
  58. .dom_element_unique_id = move(dom_element_unique_id),
  59. .url = move(url),
  60. };
  61. }
  62. }