StyleSheetIdentifier.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. Optional<i64> dom_element_unique_id = style_sheet_source.dom_element_unique_id.has_value() ? Optional<i64>(style_sheet_source.dom_element_unique_id.value()) : Optional<i64> {};
  47. TRY(encoder.encode(dom_element_unique_id));
  48. TRY(encoder.encode(style_sheet_source.url));
  49. return {};
  50. }
  51. template<>
  52. ErrorOr<Web::CSS::StyleSheetIdentifier> decode(Decoder& decoder)
  53. {
  54. auto type = TRY(decoder.decode<Web::CSS::StyleSheetIdentifier::Type>());
  55. auto dom_element_unique_id = TRY(decoder.decode<Optional<i64>>());
  56. auto url = TRY(decoder.decode<Optional<String>>());
  57. return Web::CSS::StyleSheetIdentifier {
  58. .type = type,
  59. .dom_element_unique_id = dom_element_unique_id.has_value() ? Web::UniqueNodeID(dom_element_unique_id.value()) : Optional<Web::UniqueNodeID> {},
  60. .url = move(url),
  61. };
  62. }
  63. }