/* * Copyright (c) 2020-2021, the SerenityOS developers. * Copyright (c) 2021-2023, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::CSS::Parser { class Rule : public RefCounted { public: enum class Type { At, Qualified, }; static NonnullRefPtr make_at_rule(FlyString name, Vector prelude, RefPtr block) { return adopt_ref(*new Rule(Type::At, move(name), move(prelude), move(block))); } static NonnullRefPtr make_qualified_rule(Vector prelude, RefPtr block) { return adopt_ref(*new Rule(Type::Qualified, {}, move(prelude), move(block))); } ~Rule(); bool is_qualified_rule() const { return m_type == Type::Qualified; } bool is_at_rule() const { return m_type == Type::At; } Vector const& prelude() const { return m_prelude; } RefPtr block() const { return m_block; } StringView at_rule_name() const { return m_at_rule_name; } private: Rule(Type, FlyString name, Vector prelude, RefPtr); Type const m_type; FlyString m_at_rule_name; Vector m_prelude; RefPtr m_block; }; }