DeclarationOrAtRule.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2020-2021, the SerenityOS developers.
  3. * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <LibWeb/CSS/Parser/Declaration.h>
  9. #include <LibWeb/CSS/Parser/Rule.h>
  10. namespace Web::CSS::Parser {
  11. class DeclarationOrAtRule {
  12. public:
  13. explicit DeclarationOrAtRule(RefPtr<Rule> at);
  14. explicit DeclarationOrAtRule(Declaration declaration);
  15. ~DeclarationOrAtRule();
  16. enum class DeclarationType {
  17. At,
  18. Declaration,
  19. };
  20. bool is_at_rule() const { return m_type == DeclarationType::At; }
  21. bool is_declaration() const { return m_type == DeclarationType::Declaration; }
  22. Rule const& at_rule() const
  23. {
  24. VERIFY(is_at_rule());
  25. return *m_at;
  26. }
  27. Declaration const& declaration() const
  28. {
  29. VERIFY(is_declaration());
  30. return *m_declaration;
  31. }
  32. private:
  33. DeclarationType m_type;
  34. RefPtr<Rule> m_at;
  35. Optional<Declaration> m_declaration;
  36. };
  37. }