Fastly Compute C++ SDK
Loading...
Searching...
No Matches
header.h
Go to the documentation of this file.
1#ifndef FASTLY_HTTP_HEADER_H
2#define FASTLY_HTTP_HEADER_H
3
4#include <memory>
5#include <optional>
6#include <string>
7#include <vector>
8
10#include <fastly/sdk-sys.h>
11
12namespace fastly::http {
13
16public:
17 HeaderValue(std::string value, bool is_sensitive = false)
18 : value_(std::move(value)), is_sensitive_(is_sensitive) {}
19
20 std::optional<std::string_view> string() const {
22 return std::nullopt;
23 }
24 return value_;
25 }
26
27 std::span<const uint8_t> bytes() const {
28 return std::span<const uint8_t>(
29 reinterpret_cast<const uint8_t *>(value_.data()), value_.size());
30 }
31
32 bool is_sensitive() const { return is_sensitive_; }
33
34 bool set_sensitive(bool sensitive) {
35 is_sensitive_ = sensitive;
36 return is_sensitive_;
37 }
38
40 return std::any_of(value_.begin(), value_.end(), [](char c) {
41 return c < 32 || c > 126; // ASCII range for visible characters
42 });
43 }
44
45private:
46 std::string value_;
47 bool is_sensitive_;
48};
49
53 HeaderValuesRange, fastly::sys::http::HeaderValuesIter> {
54public:
57 fastly::sys::http::HeaderValuesIter>::RustIteratorRange;
58
60 std::optional<HeaderValue> next() {
61 std::vector<uint8_t> value;
62 bool is_sensitive{false};
63 if (this->iter_->next(value, is_sensitive)) {
64 return HeaderValue(std::string(value.begin(), value.end()), is_sensitive);
65 }
66 return std::nullopt;
67 }
68};
69
72 : public fastly::detail::RustIteratorRange<HeadersRange,
73 fastly::sys::http::HeadersIter> {
74public:
76 HeadersRange, fastly::sys::http::HeadersIter>::RustIteratorRange;
77
79 std::optional<std::pair<std::string, HeaderValue>> next() {
80 std::string name;
81 std::vector<uint8_t> value;
82 bool is_sensitive{false};
83
84 if (this->iter_->next(name, value, is_sensitive)) {
85 return std::make_pair(
86 name,
87 HeaderValue(std::string(value.begin(), value.end()), is_sensitive));
88 }
89 return std::nullopt;
90 }
91};
92
96 HeaderNamesRange, fastly::sys::http::HeaderNamesIter> {
97public:
99 HeaderNamesRange, fastly::sys::http::HeaderNamesIter>::RustIteratorRange;
100
102 std::optional<std::string> next() {
103 std::string name;
104 if (this->iter_->next(name)) {
105 return name;
106 }
107 return std::nullopt;
108 }
109};
110
114 OriginalHeaderNamesRange,
115 fastly::sys::http::OriginalHeaderNamesIter> {
116public:
118 rust::Box<fastly::sys::http::OriginalHeaderNamesIter> iter)
121 fastly::sys::http::OriginalHeaderNamesIter>(std::move(iter)) {}
122
124 std::optional<std::string> next() {
125 std::string name;
126 if (this->iter_->next(name)) {
127 return name;
128 }
129 return std::nullopt;
130 }
131};
132
133} // namespace fastly::http
134
135#endif
Definition rust_iterator_range.h:14
rust::Box< fastly::sys::http::HeaderValuesIter > iter_
Definition rust_iterator_range.h:73
RustIteratorRange(rust::Box< fastly::sys::http::HeaderValuesIter > iter)
Definition rust_iterator_range.h:16
Iterates over all header names in a request or response.
Definition header.h:96
std::optional< std::string > next()
Gets the next header name.
Definition header.h:102
Represents a single HTTP header value.
Definition header.h:15
bool has_non_visible_characters() const
Definition header.h:39
HeaderValue(std::string value, bool is_sensitive=false)
Definition header.h:17
bool set_sensitive(bool sensitive)
Definition header.h:34
std::optional< std::string_view > string() const
Definition header.h:20
bool is_sensitive() const
Definition header.h:32
std::span< const uint8_t > bytes() const
Definition header.h:27
Iterates over multiple values for an individual header.
Definition header.h:53
std::optional< HeaderValue > next()
Gets the next value.
Definition header.h:60
Iterates over all headers in a request or response.
Definition header.h:73
std::optional< std::pair< std::string, HeaderValue > > next()
Gets the next header name and value.
Definition header.h:79
std::optional< std::string > next()
Gets the next header name.
Definition header.h:124
OriginalHeaderNamesRange(rust::Box< fastly::sys::http::OriginalHeaderNamesIter > iter)
Definition header.h:117
Definition access_bridge_internals.h:6
Definition backend.h:13
Definition backend.h:13