/* * Copyright (c) 2022-2023, Linus Groh * Copyright (c) 2024, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace HTTP { // https://fetch.spec.whatwg.org/#concept-header-list class HeaderList final : public RefCounted { public: static NonnullRefPtr create(Vector
= {}); Vector
const& headers() const { return m_headers; } [[nodiscard]] bool is_empty() const { return m_headers.is_empty(); } [[nodiscard]] auto begin() { return m_headers.begin(); } [[nodiscard]] auto begin() const { return m_headers.begin(); } [[nodiscard]] auto end() { return m_headers.end(); } [[nodiscard]] auto end() const { return m_headers.end(); } void clear() { m_headers.clear(); } [[nodiscard]] bool contains(StringView) const; Optional get(StringView) const; Optional> get_decode_and_split(StringView) const; void append(Header); void delete_(StringView name); void set(Header); void combine(Header); [[nodiscard]] Vector
sort_and_combine() const; struct ExtractHeaderParseFailure { }; [[nodiscard]] Variant, ExtractHeaderParseFailure> extract_header_list_values(StringView) const; struct ExtractLengthFailure { }; [[nodiscard]] Variant extract_length() const; [[nodiscard]] Vector unique_names() const; private: explicit HeaderList(Vector
); Vector
m_headers; }; }