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 #include "logger.h"
19
20 namespace cb {
21 namespace logger {
22
Config(const cJSON& json)23 Config::Config(const cJSON& json) {
24 auto* root = const_cast<cJSON*>(&json);
25 auto* obj = cJSON_GetObjectItem(root, "filename");
26 if (obj != nullptr) {
27 if (obj->type != cJSON_String) {
28 throw std::invalid_argument(
29 R"(cb::logger::Config: "filename" must be a string)");
30 }
31 filename.assign(obj->valuestring);
32 }
33
34 obj = cJSON_GetObjectItem(root, "buffersize");
35 if (obj != nullptr) {
36 if (obj->type != cJSON_Number) {
37 throw std::invalid_argument(
38 R"(cb::logger::Config: "buffersize" must be an unsigned int)");
39 }
40 buffersize = static_cast<unsigned int>(obj->valueint);
41 }
42
43 obj = cJSON_GetObjectItem(root, "cyclesize");
44 if (obj != nullptr) {
45 if (obj->type != cJSON_Number) {
46 throw std::invalid_argument(
47 R"(cb::logger::Config: "cyclesize" must be an unsigned int)");
48 }
49 cyclesize = static_cast<unsigned int>(obj->valueint);
50 }
51
52 obj = cJSON_GetObjectItem(root, "unit_test");
53 unit_test = false;
54 if (obj != nullptr) {
55 if (obj->type == cJSON_True) {
56 unit_test = true;
57 } else if (obj->type != cJSON_False) {
58 throw std::invalid_argument(
59 R"(Config: "unit_test" must be a bool)");
60 }
61 }
62
63 obj = cJSON_GetObjectItem(root, "console");
64 if (obj != nullptr) {
65 if (obj->type == cJSON_False) {
66 console = false;
67 } else if (obj->type != cJSON_True) {
68 throw std::invalid_argument(
69 R"(Config: "console" must be a bool)");
70 }
71 }
72 }
73
operator ==(const Config& other) const74 bool Config::operator==(const Config& other) const {
75 return (this->filename == other.filename) &&
76 (this->buffersize == other.buffersize) &&
77 (this->cyclesize == other.cyclesize) &&
78 (this->unit_test == other.unit_test) &&
79 (this->console == other.console);
80 }
81
operator !=(const Config& other) const82 bool Config::operator!=(const Config& other) const {
83 return !(*this == other);
84 }
85
86 } // namespace logger
87 } // namespace cb
88