Webserv
Loading...
Searching...
No Matches
Block.hpp
Go to the documentation of this file.
1#pragma once
2
5
6namespace config {
7
15class Block {
16public:
17 explicit Block(std::string const &name);
18 Block(const Block &other);
19 Block &operator=(const Block &other);
20 virtual ~Block();
21
22 // ============================== Public Interface ==============================
23
29 bool has(std::string const &key) const;
30
37 ArgumentVector const &get(std::string const &key) const;
38
45 Block &add(std::string const &key, std::vector<std::string> const &);
47 Block &add(std::string const &key, std::string const &);
49 Block &add(std::string const &key, std::string const &, std::string const &);
50
51 Block &add(std::string const &key, ParsedDirectiveArgs const &args);
52 Block &add(std::string const &key, ArgumentVector const &values);
53 Block &add(std::string const &key, ArgumentPtr value);
54 Block &add(std::string const &key, size_t value);
55
56 std::vector<std::string> getRawValues(std::string const &key) const;
57
58 std::string getFirstRawValue(std::string const &key) const;
59
60 // ============================== Getters & Setters =============================
61
62 std::vector<std::string> get(std::string const &key, http::Request const &req) const;
63 std::string getFirstEvaluatedString(std::string const &key, http::Request const &req) const;
64
69 std::string const &name() const;
70
75 std::string root() const;
76
81 std::vector<std::string> indexFiles() const;
82
83 // ================================= Fluent API =================================
84
90 Block &root(std::string const &);
91
92 size_t maxBodySize() const;
93 Block &maxBodySize(size_t);
94
95protected:
96 std::string name_;
98 friend class DirectiveHandler;
99 friend std::ostream &operator<<(std::ostream &, Block const &);
100};
101
102} // namespace config
std::string const & name() const
Gets the name of the block.
Definition Block.cpp:149
std::string root() const
Gets the root path directive.
Definition Block.cpp:147
size_t maxBodySize() const
Definition Block.cpp:202
virtual ~Block()
Definition Block.cpp:13
std::string getFirstEvaluatedString(std::string const &key, http::Request const &req) const
Definition Block.cpp:67
ArgumentVector const & get(std::string const &key) const
Safely gets the values for a directive.
Definition Block.cpp:81
std::vector< std::string > getRawValues(std::string const &key) const
Definition Block.cpp:175
Block(std::string const &name)
Definition Block.cpp:11
DirectiveMap directives_
Map storing directive names and their values.
Definition Block.hpp:97
Block & operator=(const Block &other)
Definition Block.cpp:32
std::string getFirstRawValue(std::string const &key) const
Definition Block.cpp:185
std::string name_
The name of the block (e.g., "server", "location").
Definition Block.hpp:96
std::vector< std::string > indexFiles() const
Gets the index files directive.
Definition Block.cpp:151
friend class DirectiveHandler
Definition Block.hpp:98
Block & add(std::string const &key, std::vector< std::string > const &)
Adds a directive with multiple values.
Definition Block.cpp:113
friend std::ostream & operator<<(std::ostream &, Block const &)
Definition Block.cpp:190
bool has(std::string const &key) const
Checks if a directive exists within the block.
Definition Block.cpp:89
Definition Request.hpp:66
Definition ArgumentFactory.hpp:5
std::vector< Token > ParsedDirectiveArgs
Definition types.hpp:13
std::vector< ArgumentPtr > ArgumentVector
Definition types.hpp:19
IArgument * ArgumentPtr
Definition types.hpp:18
std::map< std::string, ArgumentVector > DirectiveMap
Definition types.hpp:20