6359cc43f1b5326d62c03b7146c7710dd71e0481
[ep-engine.git] / src / configuration_impl.h
1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  *     Copyright 2017 Couchbase, Inc
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  */
17
18 /*
19  * Contains implementations relating to configuration.h that are not needed in
20  * most places Configuration is. This can be included in a far smaller number
21  * of places, reducing the overhead of including configuration.h.
22  */
23
24 #pragma once
25
26 #include <boost/variant.hpp>
27
28 #include <string>
29 #include <vector>
30
31 using value_variant_t =
32         boost::variant<size_t, ssize_t, float, bool, std::string>;
33
34 class requirements_unsatisfied : public std::logic_error {
35 public:
36     requirements_unsatisfied(const std::string& msg) : std::logic_error(msg) {
37     }
38 };
39
40 class Requirement {
41 public:
42     Requirement* add(const std::string& key, value_variant_t value) {
43         requirements.emplace_back(key, value);
44         return this;
45     }
46
47     std::vector<std::pair<std::string, value_variant_t>> requirements;
48 };