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