blob: dc61f673233d47a8fd1ac375c125de42cc3c0206 (
plain) (
blame)
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
|
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "slime_explorer.h"
namespace vespalib {
namespace {
struct SelfState : slime::ObjectTraverser {
Slime result;
SelfState() : result() { result.setObject(); }
void field(const Memory &key, const slime::Inspector &value) override {
if (value.type().getId() != slime::OBJECT::ID) {
slime::inject(value, slime::ObjectInserter(result.get(), key));
}
}
};
struct ChildrenNames : slime::ObjectTraverser {
std::vector<vespalib::string> result;
void field(const Memory &key, const slime::Inspector &value) override {
if (value.type().getId() == slime::OBJECT::ID) {
result.push_back(key.make_string());
}
}
};
} // namespace vespalib::<unnamed>
void
SlimeExplorer::get_state(const slime::Inserter &inserter, bool full) const
{
SelfState state;
_self.traverse(state);
if (state.result.get().fields() > 0) {
if (full) {
state.result.get().setBool("full", true);
}
slime::inject(state.result.get(), inserter);
}
}
std::vector<vespalib::string>
SlimeExplorer::get_children_names() const
{
ChildrenNames names;
_self.traverse(names);
return names.result;
}
std::unique_ptr<StateExplorer>
SlimeExplorer::get_child(vespalib::stringref name) const
{
slime::Inspector &child = _self[name];
if (!child.valid()) {
return std::unique_ptr<StateExplorer>(nullptr);
}
return std::unique_ptr<StateExplorer>(new SlimeExplorer(child));
}
} // namespace vespalib
|