DeclarationOrAtRule.h 990 B

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