forked from cel-expr/cel-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenum.cc
More file actions
58 lines (45 loc) · 1.25 KB
/
Copy pathenum.cc
File metadata and controls
58 lines (45 loc) · 1.25 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
#include "common/enum.h"
#include "internal/cel_printer.h"
namespace google {
namespace api {
namespace expr {
namespace common {
namespace {
using ::google::api::expr::internal::ToCallString;
struct ValueVisitor {
template <typename T>
int32_t operator()(const T& value) {
return value.value();
}
};
struct TypeVisitor {
template <typename T>
EnumType operator()(const T& value) {
return value.type();
}
};
struct ToStringVisitor {
template <typename T>
std::string operator()(const T& value) {
return value.ToString();
}
};
} // namespace
std::string UnnamedEnumValue::ToString() const {
return internal::ToCallString(type_.value()->full_name(), value_);
}
EnumValue::EnumValue(EnumType type, int32_t value)
: data_(NamedEnumValue(type.value()->FindValueByNumber(value))) {
if (absl::get<NamedEnumValue>(data_).Handle::value() == nullptr) {
data_ = UnnamedEnumValue(type, value);
}
}
int32_t EnumValue::value() const { return absl::visit(ValueVisitor(), data_); }
EnumType EnumValue::type() const { return absl::visit(TypeVisitor(), data_); }
std::string EnumValue::ToString() const {
return absl::visit(ToStringVisitor(), data_);
}
} // namespace common
} // namespace expr
} // namespace api
} // namespace google