123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #pragma once
- #include <util/generic/array_ref.h>
- #include <util/generic/deque.h>
- #include <util/generic/string.h>
- #include <util/generic/strbuf.h>
- #include <util/string/cast.h>
- class IInputStream;
- class IOutputStream;
- class THttpInputHeader {
- public:
- THttpInputHeader() = delete;
- THttpInputHeader(const THttpInputHeader&) = default;
- THttpInputHeader(THttpInputHeader&&) = default;
- THttpInputHeader& operator=(const THttpInputHeader&) = default;
- THttpInputHeader& operator=(THttpInputHeader&&) = default;
-
- THttpInputHeader(TStringBuf header);
-
-
- THttpInputHeader(TString name, TString value);
-
- inline const TString& Name() const noexcept {
- return Name_;
- }
-
- inline const TString& Value() const noexcept {
- return Value_;
- }
-
- void OutTo(IOutputStream* stream) const;
-
- inline TString ToString() const {
- return Name_ + TStringBuf(": ") + Value_;
- }
- private:
- TString Name_;
- TString Value_;
- };
- class THttpHeaders {
- using THeaders = TDeque<THttpInputHeader>;
- public:
- using TConstIterator = THeaders::const_iterator;
- THttpHeaders() = default;
- THttpHeaders(const THttpHeaders&) = default;
- THttpHeaders& operator=(const THttpHeaders&) = default;
- THttpHeaders(THttpHeaders&&) = default;
- THttpHeaders& operator=(THttpHeaders&&) = default;
-
- THttpHeaders(IInputStream* stream);
-
-
- THttpHeaders(TArrayRef<const THttpInputHeader> headers);
-
- inline TConstIterator Begin() const noexcept {
- return Headers_.begin();
- }
- inline TConstIterator begin() const noexcept {
- return Headers_.begin();
- }
-
- inline TConstIterator End() const noexcept {
- return Headers_.end();
- }
- inline TConstIterator end() const noexcept {
- return Headers_.end();
- }
-
- inline size_t Count() const noexcept {
- return Headers_.size();
- }
-
- inline bool Empty() const noexcept {
- return Headers_.empty();
- }
-
- void AddHeader(THttpInputHeader header);
- template <typename ValueType>
- void AddHeader(TString name, const ValueType& value) {
- AddHeader(THttpInputHeader(std::move(name), ToString(value)));
- }
-
-
-
- void AddOrReplaceHeader(const THttpInputHeader& header);
- template <typename ValueType>
- void AddOrReplaceHeader(TString name, const ValueType& value) {
- AddOrReplaceHeader(THttpInputHeader(std::move(name), ToString(value)));
- }
-
- bool HasHeader(TStringBuf header) const;
-
- void RemoveHeader(TStringBuf header);
-
-
- const THttpInputHeader* FindHeader(TStringBuf header) const;
-
-
- void OutTo(IOutputStream* stream) const;
-
- void Swap(THttpHeaders& headers) noexcept {
- Headers_.swap(headers.Headers_);
- }
- private:
- THeaders Headers_;
- };
|