ladybird/Libraries/LibWeb/CSS/StyleSheetIdentifier.cpp

74 lines
2.3 KiB
C++

/*
* Copyright (c) 2024, Sam Atkins <sam@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "StyleSheetIdentifier.h"
#include <LibIPC/Decoder.h>
#include <LibIPC/Encoder.h>
namespace Web::CSS {
StringView style_sheet_identifier_type_to_string(StyleSheetIdentifier::Type type)
{
switch (type) {
case StyleSheetIdentifier::Type::StyleElement:
return "StyleElement"sv;
case StyleSheetIdentifier::Type::LinkElement:
return "LinkElement"sv;
case StyleSheetIdentifier::Type::ImportRule:
return "ImportRule"sv;
case StyleSheetIdentifier::Type::UserAgent:
return "UserAgent"sv;
case StyleSheetIdentifier::Type::UserStyle:
return "UserStyle"sv;
}
VERIFY_NOT_REACHED();
}
Optional<StyleSheetIdentifier::Type> style_sheet_identifier_type_from_string(StringView string)
{
if (string == "StyleElement"sv)
return StyleSheetIdentifier::Type::StyleElement;
if (string == "LinkElement"sv)
return StyleSheetIdentifier::Type::LinkElement;
if (string == "ImportRule"sv)
return StyleSheetIdentifier::Type::ImportRule;
if (string == "UserAgent"sv)
return StyleSheetIdentifier::Type::UserAgent;
if (string == "UserStyle"sv)
return StyleSheetIdentifier::Type::UserStyle;
return {};
}
}
namespace IPC {
template<>
ErrorOr<void> encode(Encoder& encoder, Web::CSS::StyleSheetIdentifier const& style_sheet_source)
{
TRY(encoder.encode(style_sheet_source.type));
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> {};
TRY(encoder.encode(dom_element_unique_id));
TRY(encoder.encode(style_sheet_source.url));
return {};
}
template<>
ErrorOr<Web::CSS::StyleSheetIdentifier> decode(Decoder& decoder)
{
auto type = TRY(decoder.decode<Web::CSS::StyleSheetIdentifier::Type>());
auto dom_element_unique_id = TRY(decoder.decode<Optional<i64>>());
auto url = TRY(decoder.decode<Optional<String>>());
return Web::CSS::StyleSheetIdentifier {
.type = type,
.dom_element_unique_id = dom_element_unique_id.has_value() ? Web::UniqueNodeID(dom_element_unique_id.value()) : Optional<Web::UniqueNodeID> {},
.url = move(url),
};
}
}