-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathevaluatelogbuilder.h
More file actions
83 lines (63 loc) · 3.4 KB
/
evaluatelogbuilder.h
File metadata and controls
83 lines (63 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#pragma once
#include <assert.h>
#include <sstream>
#include "configcat/config.h"
#include "configcat/configcatuser.h"
#include "utils.h"
namespace configcat {
class EvaluateLogBuilder {
std::ostringstream ss;
int indentLevel;
public:
EvaluateLogBuilder() : indentLevel(0) {}
inline EvaluateLogBuilder& resetIndent() {
this->indentLevel = 0;
return *this;
}
inline EvaluateLogBuilder& increaseIndent() {
this->indentLevel++;
return *this;
}
inline EvaluateLogBuilder& decreaseIndent() {
assert(this->indentLevel > 0);
this->indentLevel--;
return *this;
}
EvaluateLogBuilder& newLine();
template <typename ValueType>
EvaluateLogBuilder& newLine(const ValueType& value) {
return newLine().append(value);
}
template <typename ValueType>
EvaluateLogBuilder& append(const ValueType& value) {
this->ss << value;
return *this;
}
template<typename... Args>
inline EvaluateLogBuilder& appendFormat(const std::string& format, Args... args) {
this->ss << string_format(format, args...);
return *this;
}
EvaluateLogBuilder& appendUserCondition(const UserCondition& condition);
EvaluateLogBuilder& appendPrerequisiteFlagCondition(const PrerequisiteFlagCondition& condition, const std::shared_ptr<Settings>& settings);
EvaluateLogBuilder& appendSegmentCondition(const SegmentCondition& condition, const std::shared_ptr<Segments>& segments);
inline EvaluateLogBuilder& appendConditionResult(bool result) { return append(result ? "true" : "false"); }
EvaluateLogBuilder& appendConditionConsequence(bool result);
EvaluateLogBuilder& appendTargetingRuleConsequence(const TargetingRule& targetingRule, SettingType settingType, const std::variant<bool, std::string>& isMatchOrError, bool newLine);
inline std::string toString() const { return ss.str(); }
private:
EvaluateLogBuilder& appendUserConditionCore(const std::string& comparisonAttribute, UserComparator comparator, const std::optional<std::string>& comparisonValue);
EvaluateLogBuilder& appendUserConditionString(const std::string& comparisonAttribute, UserComparator comparator, const UserConditionComparisonValue& comparisonValue, bool isSensitive);
EvaluateLogBuilder& appendUserConditionStringList(const std::string& comparisonAttribute, UserComparator comparator, const UserConditionComparisonValue& comparisonValue, bool isSensitive);
EvaluateLogBuilder& appendUserConditionNumber(const std::string& comparisonAttribute, UserComparator comparator, const UserConditionComparisonValue& comparisonValue, bool isDateTime);
EvaluateLogBuilder& appendTargetingRuleThenPart(const TargetingRule& targetingRule, SettingType settingType, bool newLine);
};
const char* getSettingTypeText(SettingType settingType);
const char* getSettingValueTypeText(const SettingValue& settingValue);
const char* getUserComparatorText(UserComparator comparator);
const char* getPrerequisiteFlagComparatorText(PrerequisiteFlagComparator comparator);
const char* getSegmentComparatorText(SegmentComparator comparator);
const std::string& formatSettingValue(const SettingValue& settingValue, std::string& str);
const std::string& formatUserConditionComparisonValue(const UserConditionComparisonValue& comparisonValue, std::string& str);
std::string formatUserCondition(const UserCondition& condition);
} // namespace configcat